PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Datei schreiben und lesen


Sliver21
2007-03-07, 20:26:39
Hi, ich arbeite gerade folgendes Tutotial zu Java Datenströmen durch:
http://java.sun.com/docs/books/tutorial/essential/io/bytestreams.html

Dabei habe ich folgendes Problem, im Beispielprogramm wird auf eine xanadu.txt zugegriffen. Wo soll ich diese Datei in Eclipse speichern, damit es vom Laufzeitsystem gefunden wird? Ich habe schon versucht, diese Datei im gleichen Package zu speichern, bringt aber nichts. Was ist nun zu tun?

Monger
2007-03-07, 20:39:59
Ich bin nicht ganz sicher, ob ich dein Problem verstehe...

Wie greifst du denn auf die Datei zu?
Wenn alles nix hilft, musst du halt erstmal mit absoluten Pfadangaben arbeiten.

Das einfachste wäre es vielleicht, die Datei in den Workspace mit reinzunehmen. Im Prinzip müsste es reichen, die Datei in den selben Pfad zu speichern.

Gast
2007-03-07, 20:45:18
tja da müsste man wissen von wo aus die runtime gestartet wird - bzw. was das ausführende verzeichnis ist.
kann man im prinzip recht leicht rausfinden, einfach den aktuellen pfad ausgeben.

RMC
2007-03-07, 20:52:44
Ist im Prinzip sowieso per default das Projektverzeichnis (dort wo dann zb die .jar ausgeführt wird falls du sowas hast)

Alternativ kannst du mit dem Classloader arbeiten, der bietet dir mehr Sicherheit was Pfade angeht (zb auch auf Webservern wenn dort zugegriffen werden muss, beispielsweise wegen einer Webanwendung).

Sliver21
2007-03-07, 21:18:47
Monger, ich weiß gar nicht, wie ich in Java auf eine Datei zugreife.


Ich möchte dieses Beispiel zum Laufen bringen:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;

while ((c = in.read()) != -1) {
out.write(c);
}

} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}


Die xanadu.txt sieht so aus:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.


Ich weiß nun nicht, wie ich das in Eclipse zusammenbringen soll.

Matrix316
2007-03-07, 21:55:09
? Du machst ein neues Projekt (Application) und schreibst einerseits die importierten Packages rein (import...etc.) und in die schon vorhandene public static void main deinen Quellcode. Das File sollte im Verzeichnis mit den Quellcode Dateien liegen.

Monger
2007-03-07, 22:23:54
Dein Problem ist wohl, dass du nicht weißt was das

in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");

hier eigentlich heißt. Was hinten in Klammern steht, ist nichts anderes als eine Pfadangabe. Wenn nix dabei steht, ist damit halt immer das aktuelle Arbeitsverzeichnis gemeint - was zum Zeitpunkt des Debuggens normalerweise das Projektverzeichnis ist. Schlag dich jetzt aber nicht mit solchen Details rum, sondern schreib einfach hinten in Klammern den vollen Pfad rein, z.B. : "C:/xanadu.txt" (Java mag die Backslashs nicht so gern, deshalb im Zweifel lieber die normalen Slashes verwenden)

instinct
2007-03-07, 22:33:50
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
Das in den Klammern sind relative Pfadangaben, was bedeutet, dass die Datei xanadu.txt sich in dem Verzeichnis befinden muss, in dem deine .class Dateien sind. Ebenfalls dort wird auch die Datei outagain.txt erzeugt/ueberschrieben.
Du kannst xanadu.txt auch beispielsweise auf C:\ schmeissen. Dann muss es allerdings ein absoluter Pfadname sein:
in = new FileInputStream("C:\\xanadu.txt")
DoppelSlash ist von Noeten, da du den normalen "\" fuer den Pfadnamen in Java entwerten musst.
Ich hoffe ich konnte dir helfen.

mithrandir
2007-03-08, 07:57:04
hm.. Etwas OT, aber: Niemand verwendet File.separatorChar? Ansonsten würde ich nie, nie, niemals nicht den Backslash verwenden, sondern den einfachen /. Wie Monger schon andeutete, funktioniert der eigentlich auf jedem OS (zumindest auf denen, die mir bereits untergekommen sind).

Shink
2007-03-08, 08:23:31
Wen es noch interessiert: Im Eclipse "Package Explorer" bekommt man ja alle Projekte aufgelistet.

Einfach im Projekthauptverzeichnis eine neue Datei anlegen, dann wird sie gefunden.
Ansonsten kann man sich auch unter "Run..." im Reiter "Arguments" ein beliebiges Arbeitsverzeichnis einstellen.

@mithrandir: Naja, so etwas in ne Stringkonstante hineinzuschreiben dauert doch zu lange. Dann lieber gleich /

Sliver21
2007-03-08, 18:27:05
Danke, ihr habt mir sehr geholfen! Dann kann ich ja nun weiter machen!