Я пишу программу для копирования больших файлов, поэтому я хочу прочитать определенное количество байтов и записать в другой файл. Я хочу скопировать файл и получить такое же количество байтов. Но я получаю больше. Кроме того, я также хочу, чтобы содержимое файла оставалось таким же. Что я здесь делаю неправильно? Если кто-то может объяснить, почему я получаю этот дополнительный текст, это было бы здорово.
test.txt
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
Practice.java
public class Practice{
public static void main(String[] args){
byte[] buffer = new byte[100];
try{
FileInputStream f = new FileInputStream("test.txt");
FileWriter writer = new FileWriter("copy_test.txt");
int b;
while ((b=f.read(buffer)) != -1 )
writer.write(new String(buffer));
writer.close();
} catch(Exception e){
e.printStackTrace();
}
}
}
copy_test.txt
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
metext sometext sometext
sometext sometext sometext
Есть несколько проблем с вашим кодом:
new String(byte[])
вместо указания кодировкиFileWriter
)String
принимая смещение и количество байтов, и передавая 0
и b
для аргументов, хотя я бы этого не сделал. Используйте инструкцию try-with-resources.Exception
- это обычно плохая идея. Если вам необходимо, поймайте определенные исключения; лично у меня очень мало блоков catch
- обычно, если что-то пойдет не так, для этого необходимо прекратить всю текущую операцию. (Конечно, есть случаи, когда вы можете повторить и т.д.) Я понимаю, что это может быть просто в вашем примере кода здесь, а не в вашем реальном коде.Files.copy
чтобы избежать необходимости писать какой-либо код вообще, предполагая, что вы используете Java 7. (И если вы этого не сделаете, вы должны быть!) Если вы просто хотите скопировать InputStream
в OutputStream
(и у вас нет доступной библиотеки утилиты - это часть множества библиотек), вы можете просто использовать что-то вроде:
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
Files.copy()
?InputStream
в качестве источника иWriter
качестве места назначения? А? В основном вы читаете яблоки, но пишете апельсины.