Мой код работает. Мне просто нужно знать о роли конкретной переменной в коде.
Я попытался напечатать значение в переменной «данные», но это дает мне некоторые числа, которые я не могу понять.
public static void main(String[] args) throws IOException {
FileInputStream fileinputstream = new FileInputStream ("c:\\Users\\USER\\Desktop\\read.TXT");
FileOutputStream fileoutputstream = new FileOutputStream("c:\\Users\\USER\\Desktop\\write.TXT");
while (fileinputstream.available() > 0) {
int data = fileinputstream.read();
fileoutputstream.write(data);
}
fileinputstream.close();
fileoutputstream.close();
}
Просто прочитайте Javadoc этого метода. Он читает следующий байт из потока, интерпретируемый как int
, от 0
до 255
. Вот что data
хранит.
for( int data; (data = fileinputstream.read()) != -1; ) { fileoutputstream.write(data); }
будет правильным способом чтения данных. (Не испытано.)
Обратите внимание, что это была бы отличная возможность ознакомиться с вашим пошаговым отладчиком, который мог бы показать вам разные значения, которые содержит переменная data
на разных этапах выполнения. Многие курсы CS никогда не касаются темы отладчиков, но они очень помогают, поэтому я настоятельно рекомендую вам взглянуть на них, если вы еще этого не сделали.
it gives me some numbers i cant understand about
Это потому, что вы читаете в двоичном формате. Это нормально, и копия файла будет работать, но если вы хотите понять данные, вам нужно преобразовать их в текстовый символ.
Вы можете посмотреть на документы для FileInputStream.read
, который говорит:
Reads a byte of data from this input stream. This method blocks if no input is yet available.
Returns:
the next byte of data, or -1 if the end of the file is reached.
Таким образом, полученное вами целое число (то есть число, хранящееся в data
) — это байт, прочитанный из файла. Поскольку ваш файл является текстовым, это значение ASCII символов в этом файле (при условии, что ваш файл закодирован в ASCII).
«Предполагая, что ваш файл закодирован в ASCII»: да, но маловероятно. Но на самом деле нет смысла выполнять какую-либо обработку текстового файла (за исключением копирования или дампа байтов КАК ЕСТЬ), если вы не знаете кодировку символов.
@TomBlodget Я знаю, но мне становится очень трудно удовлетворительно объяснить, что такое байты, когда файл использует кодировку, в которой используется несколько байтов для одного символа (каждый байт является частью символа?), поэтому я выбрал простой выход ...
fileinputstream.read() возвращает «следующий байт данных или -1, если достигнут конец файла».
Вы можете прочитать больше здесь
fileinputstream.available()
здесь определенно используется неправильно.