Java 写入文件时在末尾获取NULL值
我在写入文件时遇到问题。我想将输入文件的内容写入输出文件,但在写入文件时,在文件末尾写入的值为空 这背后的原因是什么 我的代码是:Java 写入文件时在末尾获取NULL值,java,io,Java,Io,我在写入文件时遇到问题。我想将输入文件的内容写入输出文件,但在写入文件时,在文件末尾写入的值为空 这背后的原因是什么 我的代码是: import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.
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();
}
}
您总是要写出完整的缓冲区,即使您只读取了部分缓冲区,因为
write
的第三个参数是len
(缓冲区的长度),而不是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
- 您根本没有使用
BufferedReader
- 考虑使用包含实用方法的或类似的第三方库来完成所有这一切
while ((ss = di.read(input, 0, len)) != -1) {
System.out.println(ss);
fout.write(input, 0, ss);
}
请注意,这里完全不需要DataInputStream和BufferedReader。您是指字节0x00还是字符串“NULL”?这是检查输入文件大小与输出文件大小的sage提醒。