0

我正在尝试写入文件,我需要在第一行写入记录总数,并在 while 循环中写入所有其他行,一切正常,但是,在第一行需要写入记录总数我该怎么做那个,请帮帮我!!谢谢!!

这是我的代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;


public class headerline {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

         File folderall = new File("FilesIn1");
         File[] BFFileall = folderall.listFiles();

         for (final File file : BFFileall) {

                String str = file.getName();

                BufferedReader br = null;

                 BufferedWriter lbwp = null; 
                 BufferedWriter lb = null;

                try {

                    int lbwpcount = 1;
                    int lbcount = 1;

                     String reprintbwletterbwpca = (str);
                     lbwp = new BufferedWriter(new FileWriter(reprintbwletterbwpca));
                     lbwp.write("Total line number: " + lbwpcount);

                     String reprintbwletterbwpcalb = (str);
                     lb = new BufferedWriter(new FileWriter(reprintbwletterbwpcalb));
                     lb.write("Total line number: " + lbwpcount);

                     br = new BufferedReader(new FileReader(file));

                     String line;
                     line = br.readLine();



                     while ((line = br.readLine()) != null) {

                            String[] actionID = line.split("|");

                            String actionid  = actionID[2];
                            String custnumber = actionID[3];

                            lbwp.write("ActionID: " + actionid + ",CustomerNumber: " + custnumber + "\r\n");
                            lbwpcount++;
                            lb.write("ActionID: " + actionid + ",CustomerNumber: " + custnumber + "\r\n");
                            lbcount++;
                    }
                     lbwp.close();
                     lb.close();

                } catch(Exception e1) {
                    e1.printStackTrace();
                }   

         }

    }

}

假设文件有 1201 行,它应该在第一行打印 Total line number: 1200。比“ActionID:” + actionid +“,CustomerNumber:” + custnumber ....

假设其他文件有 1451 行,它应该在第一行打印总行号:1450。比“ActionID:” + actionid +“,CustomerNumber:” + custnumber ....

我不知道我该怎么做,请帮助我!我可以在完成while循环后将第一行写为最后一行吗?先谢谢了!!

4

4 回答 4

2

只需使用java.nio.file包。它的类Files有一个方法readAllLines(...)。这将读取所有行并将其添加到List. 只需使用List.size()获取行数,然后根据需要将其写入另一个文件:-)

试试这个程序,这会让你知道文件中的行数:

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

import java.util.List;

public class ReadAndWriteFile {

    private Path actualPath;
    private Path sourcePath;

    private BufferedReader reader;
    private BufferedWriter writer;

    private List<String> lines;

    public ReadAndWriteFile() {
        sourcePath = Paths.get("xanadu.txt");
        //sourcePath = sourcePath.toAbsolutePath();
        actualPath = Paths.get("xanadu_new.txt");
        //targetPath = actualPath.toAbsolutePath();

        Charset charset = Charset.forName("US-ASCII");

        try {   
            lines = Files.readAllLines(sourcePath, charset);
            System.out.println("Number of Lines : " + lines.size());
            reader = Files.newBufferedReader(sourcePath, charset);
            writer = Files.newBufferedWriter(actualPath, charset);

            String message = "Total Line Number : " + lines.size();
            writer.write(String.format("%s%n", message));
            for (String line : lines) {
                System.out.println(line);
                writer.write(String.format("%s%n", line));
            }
            reader.close();
            writer.close();
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ReadAndWriteFile();
    }
}

文本文件 (xanadu.txt) 内容:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
于 2013-10-01T18:36:38.140 回答
0

您可以使用 Apache Commons FileUtils.readLines()。这会将原始文件中的所有行作为列表返回,您可以从中获取大小。

否则,您将不得不手动读取所有行以先对它们进行计数,然后再将它们写入文件。

于 2013-10-01T17:59:33.880 回答
0

这是一个高级解释:

  1. 循环遍历所有行并将其存储在List<Record>.
  2. 将您的元素总数写List<Record>为第一行(这将是记录总数)
  3. 在一个循环中,将记录数据写入文件的其余部分

由于您首先需要总数,这意味着您必须循环一次才能找出总数是多少。然后再次循环写入记录。

于 2013-10-01T17:56:22.750 回答
0

在读取文件的所有行之前,您无法知道总行号。

您可以使用的一些选项是:

  1. 读取文件两次。第一次,简单地数一下行数。打印它。然后再次读取文件,并像您现在所做的那样写入我们的记录。

  2. 暂时将记录保存在内存中。阅读文件时,将内容保存在集合中(例如ArrayList)并在最后写出。可以list.size()用来获取记录数。FileUtils.readLines()如果您不介意引入 JAR 依赖项,您可以使用 Apache Commons来执行此操作。编辑:或编写自己的方法(见下文)。

  3. 之后添加记录计数。然后按照您的操作写出文件,然后记录计数添加到文件中。

  4. 挑战要求。请问是否真的需要在开始时输出记录数?可以省略吗?会不会在最后?等等。

这是选项 2 的一些示例代码 - 一种将文件读入您​​可以操作的列表的方法:

public static List<String> readLines(File file) throws IOException {
    List<String> lines = new ArrayList<String>();
    BufferedReader br = new BufferedReader(new FileReader(file));
    try {
        String line;
        while ((line = br.readLine()) != null) {
            lines.add(line);
        }
    } finally {
        br.close();
    }
    return lines;
}

你像这样使用它:

File file = new File("example.txt");
List<String> lines = readLines(file);

int lineCount = lines.size();
// TODO: Write out the line count

for (String line : lines) {
    // TODO: Process the line
}
于 2013-10-01T17:56:52.940 回答