Вот пример кода для копирования файла в java.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
class FileCopy {
public static void main(String[] args) throws IOException {
String in = "D:\\test.txt";
String out = "D:\\test_dup.txt";
int i = 0;
try (FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out)) {
int b;
while ((b = fis.read()) != -1) {
System.out.println(b + "....." + (char) b);
fos.write(b);
i++;
}
} catch (Exception e) {
System.out.print(e);
} finally {
System.out.println("done" + i);
}
}
}
Содержимое файла "test.txt" - "Добро пожаловать". Когда я запускаю программу, контекст копируется во второй файл, а вывод программы
87.....W
101.....e
108.....l
99.....c
111.....o
109.....m
101.....e
Мы используем целое число, чтобы запугать результат, как происходит автоматическое преобразование из int в символ, когда мы пишем int в FileOutpurtStream? или где задокументировано это автоматическое преобразование типа char в int при чтении и int в char при записи.
если метод FileInputStream.read читает байт данных за раз, то почему тип возвращаемого значения - int, а не byte.
Файлы на диске - это просто последовательности 8-битных целых чисел (которые мы называем байтами). Если вы откроете этот файл с помощью программы, которая интерпретирует эти байты как символы ASCII, вы увидите их как символы ASCII (независимо от того, должны ли они восприниматься как таковые, или нет)
@anna насчет вашего редактирования, это совершенно другой вопрос. Предлагаю вам открыть новую по этому поводу.




write записывает байты. Так что это ожидалось.
Когда он записывает, например, 87, он не записывает символы 8 и 7, он записывает байт со значением 87, который оказывается ASCII W.
это значение ascii символа