Ich habe eine Beispielmethode, die eine Datei mit InputStream und OutputStream in eine andere kopiert. In diesem Fall ist die Quelldatei in 'UTF-8' codiert. Auch wenn ich die Codierung beim Schreiben auf die Festplatte nicht festlege, hat die Zieldatei die richtige Kodierung. Aber wenn ich eine java.lang.String in eine Datei schreiben muss, muss ich die Codierung angeben. Warum das ?Wann muss ich die Codierung beim Schreiben der Datei auf die Festplatte angeben?
public static void copyFile() {
String sourceFilePath = "C://my_encoded.txt";
InputStream inStream = null;
OutputStream outStream = null;
try{
String targetFilePath = "C://my_target.txt";
File sourcefile =new File(sourceFilePath);
outStream = new FileOutputStream(targetFilePath);
inStream = new FileInputStream(sourcefile);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
System.out.println("File "+targetFilePath+" is copied successful!");
}catch(IOException e){
e.printStackTrace();
}
}
Meine Vermutung ist, dass, da die Quelldatei mir richtige Codierung hat und da wir ein Byte zu einem Zeitpunkt, zu lesen und schreiben, es funktioniert gut. Und java.lang.String ist standardmäßig 'UTF-16' und wenn wir es in die Datei schreiben, liest es ein Byte nach dem anderen anstelle von 2 Bytes und damit auch Müllwerten. Ist das richtig oder bin ich völlig falsch in meinem Verständnis?
Sie haben den Teil angezeigt, der funktioniert, und Sie haben mehrere Fragen zu einem anderen Teil gestellt, der nicht funktioniert und nicht angezeigt wird. Schwer zu wissen, wovon du redest. – EJP