Java无法打印从file1.txt到file2.txt的所有行?

时间:2013-03-29 23:11:01

标签: java

我正在从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
                }
            }
        }

3 个答案:

答案 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);
    }