写入文件时遇到问题。我想将输入文件的内容写入输出文件,但在写入文件时,我在文件末尾写入了NULL值。
背后的原因是什么?
我的代码是:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class FileReading {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fi=new
FileInputStream("E:\\Tejas\\NewData_FromNov\\New_Folder\\bb.txt");
DataInputStream di=new DataInputStream(fi);
BufferedReader buf=new BufferedReader(new InputStreamReader(di));
FileOutputStream fout=new FileOutputStream("E:\\Tejas\\NewData_FromNov\\New_Folder\\Out_bb.txt");
int ss;
byte[] input=new byte[500];
int len=input.length;
while((ss=di.read(input,0,len))!=-1)
{
System.out.println(ss);
//fout.write(ss);
fout.write(input,0,len);
}
fout.close();
}
}
答案 0 :(得分:4)
你总是写出完整的缓冲区,即使你只是读取了它的一部分,因为write
的第三个参数是len
(缓冲区的长度)而不是{{ 1}}(读取的字节数)。你的循环应如下所示:
ss
此外:
int bytesRead; // Easier to understand than "ss"
byte[] buffer = new byte[500];
while((bytesRead = di.read(buffer, 0, buffer.length)) != -1)
{
System.out.println(bytesRead);
fout.write(buffer, 0, bytesRead);
}
块中的输入和输出流,以确保它们始终关闭(即使有例外)。finally
- 这里只需要DataInputStream
。FileInputStream
。答案 1 :(得分:3)
read方法返回实际读取的字节数,如果已到达流的末尾,则返回-1。所以你应该只编写ss字节,而不是len字节:
while ((ss = di.read(input, 0, len)) != -1) {
System.out.println(ss);
fout.write(input, 0, ss);
}
注意这里完全不需要DataInputStream和BufferedReader。