Zapis do suboru :/

Programovacie jazyky, rady, poradňa...
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Zapis do suboru :/

Príspevok od používateľa dEVIANT »

Zdravím. Nechápem, prečo mi nezapisuje do súboru??...mám to nejako takto

Kód: Vybrať všetko

public void Save() throws IOException  {
File subor = null;
    try {
            subor = new File("save.txt");
            subor.createNewFile();
        } catch(IOException e) {
             System.err.print(e); }
    
     PrintWriter vystup = new PrintWriter(new FileWriter(subor));
     for (int c=0;c<prikazy.size();c++) {
         String out = prikazy.get(c);
         vystup.println(out);
                 }
        vystup.close();
    
}
postupne ukladám do polia zadané príkazy, ktoré sa tam aj uložia pretože testujem ich výpis...no ale nezapíše ich postupne do súboru, aj keď súbor vytvorí.

Je to dobrý sposob??alebo na to ísť ináč? Kedže potom budem z toho súboru načítavať riadok po riadku a pomocou jednej metódy tie príkazy vykonávať...Ďakujem za pomoc...
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

vytvor si 2 metody napr:
Save- bude zabisovat vytvorene udaje
Data- bude posytovat data na zápis

save

Kód: Vybrať všetko

        private void Save() throws IOException {
            FileWriter w = new FileWriter(atCestaKSuboru);
            BufferedWriter bw = new BufferedWriter(w);

            for (int i = 0; i < data.length; i++) {
                bw.write(data[i] + "\n");
            }

            bw.flush();
            bw.close();
        }
data

Kód: Vybrať všetko

                try {
                    Save();
                } catch (IOException e) {
                    chyba = e.getMessage();
                }
toto funguje na 100% ..len si to musiš podopisovat lebo som to len tak vytrhol z triedy a poskracoval čo tam bolo zbytočne ..ale tak to by nemal byt myslim problem už si to dokončit aby to išlo :wink:
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

ani to tvoje nefunguje :/ ....samozrejme som musel zmeniť aj to data.lenght() na prikazy.size kedže ja chcem do súboru postupne poukladať všetky prvy ArrayList<String>. A mám 2 metódy...len tu druhú mám v inej triede a odkazujem sa z nej na túto...
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

vieš čo dam ti tu celučičký celý kod z ktoreho som sa to ja učil

Kód: Vybrať všetko

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Stringy {
    public static final String vstupnySubor = "c:/vstup.txt";
    public static final String vystupnySubor = "c:/vystup.txt";

    public static int pocetSlov(String veta) {
        int i = -1, pocet = 0;
        veta = veta.trim(); // vymaze zaciatocne a koncove medzery 
        do {
            i = veta.indexOf(" ", i + 1);
            if (i >= 0) {
                pocet++;
            }
        } while (i >= 0);
        return pocet + 1;
    }

    public static String vymazDiakritiku(String s) {
        // pismena s diakritikou 
        String[] pd = { "ď", "ľ", "š", "č", "ť", "ž", "ý", "á", "í", "é", "ú",
                "ä", "ň", "ĺ", "ŕ", "ô", "ó", "Ď", "Ľ", "Š", "Č", "Ť", "Ž",
                "Ý", "Á", "Í", "É", "Ú", "Ň", "Ó", "Ŕ", "Ĺ" };
        // pismena bez diakritky zodpovedajuce pismenam v poli pd 
        String[] p = { "d", "l", "s", "c", "t", "z", "y", "a", "i", "e", "u",
                "a", "n", "l", "r", "o", "o", "D", "L", "S", "C", "T", "Z",
                "Y", "A", "I", "E", "U", "N", "O", "R", "L" };

        String vysledok = s;
        // prejdeme celym polom pd a nahradime vsetky vyskyty pismen 
        // s diakritikou pismenami bez diakritiky 
        for (int i = 0; i < pd.length; i++) {
            vysledok = vysledok.replaceAll(pd[i], p[i]);
        }
        return vysledok;
    }

    public static void main(String[] arg) {
        try {
            // nacitaj vstupny subor   
            System.out.println("Citam zo suboru: "+ vstupnySubor);
            String[] riadky = citajZoSuboru(vstupnySubor);
            
            int pocetSlov = 0;
            
            System.out.println("Pocet riadkov: " + riadky.length);
            
            // zmaz v nich diakritiku 
            for (int i = 0; i < riadky.length; i++) {
                // pocitame si pocet zmenenych slov pre neskorsi vypis 
                pocetSlov += pocetSlov(riadky[i]);
                // zmenime dany riadok 
                riadky[i] = vymazDiakritiku(riadky[i]);
            }
            
            System.out.println("Zmenenych slov: " + pocetSlov);
            
            // zapis ich do vystupneho suboru 
            System.out.println("Zapis do suboru: "+ vystupnySubor);
            zapisDoSuboru(vystupnySubor, riadky);

        } catch (IOException e) {
            System.out.println("Chyba zapisu na disk: " + e.getMessage());
        }
    }

    public static String[] citajZoSuboru(String menoSuboru) throws IOException {
        FileReader r = new FileReader(menoSuboru);
        BufferedReader br = new BufferedReader(r);

        // spocitame pocet neprazdnych riadkov v subore 
        // aby sme vedeli rozmer pola ktore mame vratit 
        int pocetRiadkov = 0;
        String riadok = "";
        // ked sa riadok == null tak sme narazili na koniec suboru 
        while (riadok != null) {
            riadok = br.readLine();
            if (riadok != null) {
                pocetRiadkov++;
            }
        }

        int i = 0;

        br.close();
        
        // musime zavriet pristup k suboru  
        // a znova ho nainicializovat aby sme sa dostali 
        // na zaciatok suboru 
                
        r = new FileReader(menoSuboru);
        br = new BufferedReader(r);

        // alokujeme pole velkosti poctu neprazdnych riadkov v subore 
        String[] vysledok = new String[pocetRiadkov];
        riadok = "";
        
        // nacitame riadky 
        while (riadok != null) {
            riadok = br.readLine();
            if (riadok != null) {
                vysledok[i] = riadok;
                i++;
            }
        }

        // zavrieme subor 
        br.close();

        // vratime dane pole 
        return vysledok;
    }

    public static void zapisDoSuboru(String menoSuboru, String[] riadky)
            throws IOException {
        FileWriter w = new FileWriter(menoSuboru);
        BufferedWriter bw = new BufferedWriter(w);
        
        // zapiseme vsetky riadky 
        for (int i = 0; i < riadky.length; i++) {
            bw.write(riadky[i] + "\n");
        }

        // zavretie suboru je potrebne aby sa data zapisali na disk 
        bw.flush();
        bw.close();
    }
}
ak ti to ani teraz nepojde tak sa vyser nato a chod robit niečo ine :wink:
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

njn díky, ešte niečo poskúšam...a nemožem sa na to vysrať, je to semestrálna projekt na Objektovo orientované programovanie :D
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

dEVIANT napísal:njn díky, ešte niečo poskúšam...a nemožem sa na to vysrať, je to semestrálna projekt na Objektovo orientované programovanie :D
lol tak kasli na školu potom :) ..ale nie :) no tak ten kod skus poučit som som sem dal a malo by ti to ist na 100% tak ja som odtial poviberal čo mne trebalo ..a ak aj tak ti to nepojde porozmyšlaj o nejakej zmene obsahu a usporiadani tried

pekne si nanovo nakresli a popiš na papier celu štrukturu tvojho zadania a uvidiš že to bude aj rýchlejšie,prehladnejšie a oovela lepšie :wink:
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

no ja už všetko kompletne mám, hra funguje všetko šlape...len ešte treba spraviť uloženie a načítanie hry :D

tak som došiel na to, že to nie vo výpise bola chyba...ale v ukladaní do toho ArrayListu...lebo som si spravil prikaz ktorý ho ma vypísať a vypísal, že je prázdny, no len nechápem prečo...veď kód je správny či?

v Parseri ak sa jedná o príkaz vlozí ho do listu pomocou metódy add

Kód: Vybrať všetko

 boolean OK=ret.startsWith(list.get(i).getName());
            if(OK)
            {  History historia = new History();
               historia.add(ret);

Kód: Vybrať všetko

public void add(String line) {
    prikazy.add(line);
    
}
public void returnArray() {
    if (prikazy.size() == 0) System.out.println("prazdna");
        else {
    for (int i=0;i<prikazy.size();i++)
         System.out.println(prikazy.get(i));
        }
no a returnArray vráti prazdna

:?
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

a kde mas nejaku navratovu hodnotu v tom Returnarray??? nič take tam nevidim ani nič že by sa ti v tej metode niečo vytvaralo alebo podobne
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

veď tá metóda vypíše celý obsah arraylistu v tom system.out.println....ciže tam žiadnu návratovú hodnotu netreba nie?

btw ten druhý kód je už z triedy History...kde mám aj deklarovaný arraylist<String>
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

dEVIANT napísal:veď tá metóda vypíše celý obsah arraylistu v tom system.out.println....ciže tam žiadnu návratovú hodnotu netreba nie?

btw ten druhý kód je už z triedy History...kde mám aj deklarovaný arraylist<String>
to si mam odkial vycucnut ..daj tu skor kod kde sa ti to zapisuje nie ? ved to ti nejde ... toto čo si hodil hovoriš že funguje a normalne ti všetko vypiše ?
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

sry :D jop zadam napr . "vychod" ...do arraylistu by malo ulozit vychod...
ten vychod po stlaceni enter vypise kedze som dal do addP este System.out...
cely kod triedy

Kód: Vybrať všetko

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package textovka;

import java.util.ArrayList;

/**
 *
 * @author Roman Málik
 */
public class History {
  private ArrayList<String> prikazyH;


  public History(){
    prikazyH = new ArrayList<String>();
    }


public void addP(String ar) {
    prikazyH.add(ar);
    System.out.println(ar);
    
}
public void returnArray() {
    if (prikazyH.size() == 0) System.out.println("prazdna");
        else {
    for (int i=0;i<prikazyH.size();i++)
         System.out.println(prikazyH.get(i));
        }

}
public void clear(){
    prikazyH.clear();
}
    
public void Save() {
  
}



public void Load() {

 
}
 public void setParams(String arg0) {
      
    }

}


toto je trieda reprezentujuca prikaz HISTORIA...cize tento ked zadam ma sa vypisat historia

Kód: Vybrať všetko

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package commands;

import TextGame.Command;
import TextGame.Game;
import TextGame.GameState;
import textovka.GameImpl;
import textovka.History;

/**
 *
 * @author dEVIANT
 */
public class Historia implements Command {
    private String name;
    private String params;

    public Historia() {
    name = "HISTORIA";
    }

    public GameState execute(Game game) {
       History hi = new History();
       hi.returnArray();
      
      return GameImpl.stav = GameState.PLAYING;
    }

    public void setParams(String arg0) {
        this.params = arg0;
    }

    public String getParams() {
       return params;
    }

    public String getName() {
      return name;
    }

    public String getDescription() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
no a v hrenej slučke GameImpl to mám takto

Kód: Vybrať všetko

public void play() {
        createRooms();
        inventar = new BackpackImpl();
        while( stav == GameState.PLAYING )
        {
            currentRoom.show();
            System.out.print("> ");
            Scanner reader = new Scanner( System.in );
            String line = reader.nextLine();

            line=line.trim();
            line=line.toUpperCase();
            History historia = new History();
            historia.addP(line);
            Parser prikaz = new Parser(this);
            prikaz.getCommand(line);
            if(stav == GameState.GAMEOVER){
                System.out.println("Pre zobrazenie príkazov napíš PRIKAZY");
                GameImpl hra = new GameImpl();
                hra.play();
            }
vobec tomu nechápem prečo to nejde...tak isto mám urobený vypis predmetov v miestnosti alebo inventari...a funguje...ale toto nie...

ten Parser tam sluzi na vyhodnotenie prikazov...ak sa jedna o "historia" tak zavola metodu execute triedy Historia...ktora by mala vykonat metodu returnArray triedy History...
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

Napis na tuke forum ;-) tam ti poradi mirek...
a btw, to ukladanie nie je take jednocuche, musis osetrit aj to, ze nie vsetky prikazy sa maju ulozit ;-)
dEVIANT
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 47
Registrovaný: 02 apr 2009, 20:18

Príspevok od používateľa dEVIANT »

napísal som tak uvidíme..a výnimky spravím, až ked ten save/load bude fungovať...
Napísať odpoveď