ich schreibe gerade ein Programm, das über die Konsole einen Dateinamen
erwartet und in einen FileInputStream zur Weiterverarbeitung schreibt.
Leider bekomme ich immer die Meldung "Die Syntax für den Dateinamen,
Verzeichnisnamen oder die Datenträgerbezeichnug ist falsch", obwohl ich den
richtigen Dateinamen + Pfad angebe.
Als Hinweistext erscheint auch noch eine java.io.fileNotFoundException
Hier ein Programmsegment aus meinem Code:
----------------------------------------------
byte[] console = new byte[80] // Eingabe des vorhandenen
Dateinamens, z. B. c:/xyz.dat
try {
System.in.read(console);
.
} .
.
try {
FileInputStream ein = new FileInputStream(new String(console));
.
} .
Ändere ich die obige Zeile zu FileInputStream ein =new
FileInputStream("c:/xyz.dat");
funktioniert das Programm.
Wo liegt der Fehler und was muss ich ändern?
PS: Gibt es mit relativ wenig Programmieraufwand eine Möglichkeit, alle
Files eines gewünschten Verzeichnisses mit einer bestimmten Endung rekursiv
sequentiell einzulesen?
Also etwa: *.dat, um bei obigem Beispiel zu bleiben.
Franz
Hallo,
gib deine Variable console aus dann weisst du wo das Problem liegt (ist
kein String!). Lese den Input besser ein durch ..
/* IOException behandeln */
String myDir;
BufferedReader reader = new BufferedReader (new
InputStreamReader(System.in));
myDir = reader.readLine();
/* öffne File */
File myFile = new File(myDir);
um alle Dateien aus einem Verzeichniss aufzulisten ...
/* wenn Verzeichniss erzeuge ein file Array mit allen Dateinen darin */
File myFilesInDir[];
if(myFile.isDirectory()) {
myFilesInDir = myFile.listFiles(); // hier sind alle Files aus myFile
drin...
}
Gruss, Chris
>ich schreibe gerade ein Programm, das über die Konsole einen Dateinamen
>erwartet und in einen FileInputStream zur Weiterverarbeitung schreibt.
In einen FileInputStream kann man nichts schreiben, der ist nur zum
Lesen da. Deswegen vermutlich auch die Meldung, daß nichts gefunden
wird. Nimm PrintWriter zum Schreiben von Textzeilen.
[...]
>byte[] console = new byte[80] // Eingabe des vorhandenen
>Dateinamens, z. B. c:/xyz.dat
>try {
> System.in.read(console);
> .
>} .
Der Ansatz zum Lesen ist falsch. Versuche es einmal so:
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
String line = in.readLine();
>try {
> FileInputStream ein = new FileInputStream(new String(console));
> .
>} .
>
>
>Ändere ich die obige Zeile zu FileInputStream ein =new
>FileInputStream("c:/xyz.dat");
>funktioniert das Programm.
In "ein" hineinschreiben kannst Du damit aber immer noch nicht.
[...]
>PS: Gibt es mit relativ wenig Programmieraufwand eine Möglichkeit, alle
>Files eines gewünschten Verzeichnisses mit einer bestimmten Endung rekursiv
>sequentiell einzulesen?
>Also etwa: *.dat, um bei obigem Beispiel zu bleiben.
Nimm als Ausgangspunkt das Programm
<http://de.geocities.com/uweplonus/faq/io.html#rekursivVerzeichnis>.
Statt
// entry ist eine Datei
System.out.println(entry);
prüfst Du dann mit
entry.getName().endsWith(".dat")
ob Du eine passende Datei hast. Die Dateiendung .dat benutzt übrigens
jedes dritte Programm, also hast Du vielleicht auch ein paar falsche
Treffer.
Gruß,
Marco
--
Bitte nur in der Newsgroup antworten, nicht per Email!
de.comp.lang.java Homepage: http://www.dclj.de/
FAQ: http://www.faqs.org/faqs/de/comp-lang-java/faq/
Meine Java-Seiten: http://www.geocities.com/marcoschmidt.geo/java.html
ich werde das mal versuchen
Gruß
Franz