Permalänk
Medlem

Java problem med FileInputStream

Hallo

Jag har lite problem med att kunna göra så att jag spara det användaren har skrivit in till en txt fil...

har flera klasser men tex så jag har tänkt är att utifrån min main klass så skall jag kalla på en klass som sköter om sparandet till fil o hämtandet från fil

Har gjort ett projekthanterings program o jag vill kunna spara detta till en fil men jag förstår inte riktigt hur man gör , har sett lite exempel på internet o så men förstår inte riktigt...

ni som har lust får mer än gärna visa ett simpelt exempel på detta
tack i för hand

Visa signatur

xbox360 slim 250gb + ps3 Slim 100gb + wii

Permalänk
Medlem

Du skriver inte till filer med FileInputStream. FileOutputStream, däremot...

Men om det bara är fråga om textfiler, tycker jag att du ska använda en FileWriter som omslag runt en File:

try { File outFile = new File("minfil.txt"); FileWriter w = new FileWriter(outFile); w.write("En rad.\nEn annan rad."); w.write("\nÄnnu en rad."); w.close(); } catch (IOException ex) { System.err.println("Det gick dåligt."); ex.printStackTrace(); }

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av badboll
Du skriver inte till filer med FileInputStream. FileOutputStream, däremot...

Men om det bara är fråga om textfiler, tycker jag att du ska använda en FileWriter som omslag runt en File:

try { File outFile = new File("minfil.txt"); FileWriter w = new FileWriter(outFile); w.write("En rad.\nEn annan rad."); w.write("\nÄnnu en rad."); w.close(); } catch (IOException ex) { System.err.println("Det gick dåligt."); ex.printStackTrace(); }

Det verkar inte så krångligt , men dum fråga men ifal jag skapar en klass
FileOutput som skall spara all text användaren har skrivit in

hade tänkt att från main skapa en metod saveFile som jag skickar in objektet (projekt p) För att där ifrån kalla på klassen FileOutput....

eller kan jag istället göra så som du angav o sedan bara skicka in objeketet där

som tex
public void saveFile(Projekt p){

try {
Iterator e = p.getResurs();

File outFile = new File("minfil.txt");
FileWriter w = new FileWriter(outFile);

if(e.hasNext()){

while(e.hasNext()){
w.write(e.next);

}

}else{
System.out.println("Det finns inga resurser inlagda");
}
w.close();

} catch (IOException ex) {
System.err.println("Det gick dåligt.");
ex.printStackTrace();
}
}

Visa signatur

xbox360 slim 250gb + ps3 Slim 100gb + wii

Permalänk
Medlem

Kan nog vara på rätt väg. Några saker, dock...

1) Använd code-taggar när du postar kod på forumet för att behålla indenteringen.

2) next på en Iterator är ett metodanrop, glöm inte parenteserna:

w.write(e.next());

3) Din exempelkod kommer att skapa, och skriva över, minfil.txt även om iteratorn inte har några element. Är det önskvärt? Om inte, flytta in File och FileWriter-joxet innanför if (e.hasNext()) {...

4) Tänk på att en FileWriter skriver strängar till en fil. Vad har din iterator för typ? Om det inte är strängar så kan du få problem:

Om inte e.next() returnerar String, så kommer w.write(e.next()) skriva det som metoden toString() på returvärdet ger. Returnerar e.next() ett objekt av typen Foo, så kommer Foo.toString() att användas för att få ett strängvärde. Är inte Foo.toString() definierad, kommer toString() tillhörande Foo:s superklass att anropas. Finns inte den går vi uppåt i hierarkin igen, och så vidare tills vi når Object.toString() som för det mesta inte skriver ut något vettigt. Så risken finns att du bara skriver ut rappakalja...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av badboll
Kan nog vara på rätt väg. Några saker, dock...

1) Använd code-taggar när du postar kod på forumet för att behålla indenteringen.

2) next på en Iterator är ett metodanrop, glöm inte parenteserna:

w.write(e.next());

3) Din exempelkod kommer att skapa, och skriva över, minfil.txt även om iteratorn inte har några element. Är det önskvärt? Om inte, flytta in File och FileWriter-joxet innanför if (e.hasNext()) {...

4) Tänk på att en FileWriter skriver strängar till en fil. Vad har din iterator för typ? Om det inte är strängar så kan du få problem:

Om inte e.next() returnerar String, så kommer w.write(e.next()) skriva det som metoden toString() på returvärdet ger. Returnerar e.next() ett objekt av typen Foo, så kommer Foo.toString() att användas för att få ett strängvärde. Är inte Foo.toString() definierad, kommer toString() tillhörande Foo:s superklass att anropas. Finns inte den går vi uppåt i hierarkin igen, och så vidare tills vi når Object.toString() som för det mesta inte skriver ut något vettigt. Så risken finns att du bara skriver ut rappakalja...

2. tack det skall jag göra missade det
3.Skrivfel det är meningen att File o filewriter skall vara innanför if (e.hasNest())

4. Min iterator innehåller både strings o doubles resurs är nämligen en ArrayList ser ut så här i min klass

public Iterator getResurs(){ return resurs.iterator(); }

hmm vet inte om jag riktigt är med: Förstår att det finns en risk att det blir konstigt, men borde det inte funka ifall jag i mina subklasser gör så här

public String toString() { return "Konsult:" + namn + "\nbudgetTid:" + budgetTid + "\nutfördTid:" + utfördTid + "\nTimlön:" +lön +"\nKostnaden för resursen är:"+ this.beräknaKostnad(); }

Tack igen för dina svar guldvärt

Visa signatur

xbox360 slim 250gb + ps3 Slim 100gb + wii

Permalänk
Medlem

Tjena hmm tänkte om jag gör så här o ifall jag har förstått det rätt (hmm känns magiskt) så skickar jag in objektet p där jag sedan använder mig av objektOutputStream för att skriva projekt p till fil..
här kommer det som gör mig osäker kan jag bara säga new FileOutputStream("myFile.txt"); o den spara allt till min angivna txt??? skall kolla om det går nu heheh

public void sparaFil(Projekt p){ try{ ObjectOutputStream out= new ObjectOutputStream (new FileOutputStream("myFile.txt")); out.writeObject(p); out.close(); } catch (IOException ie){ ie.printStackTrace(); } }

Visa signatur

xbox360 slim 250gb + ps3 Slim 100gb + wii