У меня есть образец метода, который копирует один файл в другой с помощью InputStream и OutputStream. В этом случае исходный файл кодируется в 'UTF-8'. Даже если я не укажу кодировку во время записи на диск, целевой файл имеет правильную кодировку. Но, если мне нужно написать файл java.lang.String в файл, мне нужно указать кодировку. Почему это ?Когда мне нужно указать кодировку при записи файла на диск?
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();
}
}
Я думаю, что, так как исходный файл имеет правильную кодировку тебя и так как мы читать и писать один байт в то время, он отлично работает. И java.lang.String по умолчанию является «UTF-16», и если мы напишем его в файл, он читает по одному байту за раз вместо 2 байтов и, следовательно, значений мусора. Это правильно или я совершенно не прав в своем понимании?
Вы показали часть, которая работает, и вы задали несколько вопросов о другой части, которая не работает и не отображается. Трудно понять, о чем вы говорите. – EJP