PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : filereader, richtig und will trotzdem nicht?


Mr Johnson
16.08.2002, 14:08
ich scheine auf der leitung zu stehen.
ich versuche eine binäre datei auszulesen die temporär erzeugt wird (beschrieben, geschlossen,...,und erst nach den lesen gelöscht wird). aber nur hin und wieder schafft meine funktion die datei richtig auszulesen...bei ein paar bytes liest es statt dem binären wert ein '?' ein. meines erachtens muß der fehler in der markierten zeile liegen. warum verdammt?
hier der code. (j2sdk1.4 aber auch andere auf win98)

public static String readfile(String filename){
String s="";
try {
FileReader f = new FileReader(filename);
int c;
while ((c = f.read()) != -1) {
s+=String.valueOf((char)c); // <- Fehler??
/*s+=(char)c;*//gleicher fehler
}
f.close();
return s;
}catch (IOException e) {System.err.println(e.toString());}
return "";
}

gr33tz Johnson


MrEasy
16.08.2002, 15:11
die beschreibung der klasse FileReader erklärt dir den fehler schon:
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an InputStreamReader on a FileInputStream.

FileReader is meant for reading streams of characters. For reading streams of raw bytes, consider using a FileInputStream.

also verbesserungsvorschlag:

char c;
StringBuffer sb = new StringBuffer(""); // <- hier besser als normaler string
InputStream is = new FileInputStream("fileName");
while ((c = is.read()) != -1) {
sb.append( (char)c );
}
is.close();
String s = sb.toString();


edit: seit 1.4 gibt es im package java.nio (nio = new I/O) klassen die wesentlich effektiver dateioperationen durchführen, als die alten klassen, sind vielleicht auch mal nen blick wert

Mr Johnson
02.09.2002, 17:21
ein verspätetes danke.
das problem lag bei der konvertierung zum string, somit habe ich es mit einem byte_array gemacht und es funzt. der code ist nicht optimiert bin für verbesserungsvorschläge gerne offen.
public static byte[] readfile(String filename){
byte[] content=null;
try {
FileInputStream fis = new FileInputStream(filename);
int c,count=0;
while ((c=fis.read())!=-1)
count++;;
content=new byte[count];
fis.close();
fis = new FileInputStream(filename);
for (int d=0;d<count;d++) {
content[d]=(byte)fis.read();
}
fis.close();
}catch(FileNotFoundException e){System.out.println(e.toString());}
catch(IOException e){System.out.println(e.toString());}
return content;
}
thx, Johnson