我正在从file1.txt读取行,并且仅将选定的几行复制到file2.txt。但java不会根据我的代码复制应该复制的所有行。底部625行未复制。我必须注意,应该复制的行全部显示在控制台上。所以txt文件没有问题。这里出了什么问题?代码如下:
InputStream i = new FileInputStream("file1.txt");
InputStreamReader is=new InputStreamReader(i);
BufferedReader bsa = new BufferedReader(iq);
FileWriter fw=new FileWriter("file2.txt");
BufferedWriter bw=new BufferedWriter(fw);
PrintWriter pr=new PrintWriter(bw);
String z="";
for(int i=0;i<3137;i++){
z=bsa.readLine();
for(int q=0;q<2538;q++){
if(array1[i].equals(array2[q])==true){
System.out.println(z);//to see printed lines in console
pr.println(z);//printing to file2
}
}
}
答案 0 :(得分:3)
您是否关闭了PrintWriter
?
pr.close();
PrintWriter
缓冲数据,直到其缓冲区已满,并将其写入磁盘。它的默认缓冲区大小为8192 characters,因此在调用close
之前,几百行可以很容易地保持不成文。
答案 1 :(得分:2)
您需要使用PrintWriter
pr.close();
答案 2 :(得分:1)
为了从一个文件复制到另一个文件,我建议这样做:
try (final InputStream inputStream = new FileInputStream(file1);
final OutputStream outputStream = new FileOutputStream(file2)) {
final byte[] buffer = new byte[1024];
int numRead = -1;
while ((numRead = inputStream.read(buffer)) >= 0) {
outputStream.write(buffer, 0, numRead);
}
}
它使用java 7 try-with-resources语法;它也避免了你的神奇数字。
你也可以使用FileChannel
,这有点简单:
try (final FileChannel source = new RandomAccessFile(file1, "r").getChannel();
final FileChannel dest = new RandomAccessFile(file2, "rw").getChannel()) {
source.transferTo(0, source.size(), dest);
}