use*_*119 1 java byte file filestream
我正在编写一个程序来复制大文件,所以我想读取特定的字节数并写入另一个文件.我想复制文件并获得相同的字节数.但我越来越多了.另外,我还希望文件的内容保持不变.我在这做错了什么?如果有人能解释为什么我会收到这些额外的文本,那就太棒了.
的test.txt
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
sometext sometext sometext sometext
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您的代码有几个问题:
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);
}
Run Code Online (Sandbox Code Playgroud)