以反向顺序写入行

时间:2014-08-02 16:27:26

标签: java filereader filewriter

我想以相反的顺序写行 输入:第1行。第2行。第3行。 输出:第3行第2行第1行。

这是以下代码。

{            
    FileReader fr = new FileReader("src/file/in.txt");
    FileWriter fw = new FileWriter("src/file/out.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    BufferedReader buffer = new BufferedReader(fr);
    String msg =buffer.readLine();
    String[] words = msg.split ("\\.");
    System.out.println( "The reversed words are : ");
    for(int x = words.length - 1; x >=0; x--) {
        bw.write(words[x] + " "); 
    } 
    bw.close();
    fr.close();
}

5 个答案:

答案 0 :(得分:1)

关闭流

       try {            
            FileReader fr = new FileReader("in.txt");
            FileWriter fw = new FileWriter("out.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            BufferedReader buffer = new BufferedReader(fr);
            String msg =buffer.readLine();
            String[] words = msg.split (" ");
            System.out.println( "The reversed words are : ");
            for(int x = words.length - 1; x >=0; x--) {
                bw.write(words[x] + " ");  // here it is not working
               // System.out.print(words[x]+" " );
            }
            bw.close();
            fw.close();
        } catch (Exception e) {

        }

答案 1 :(得分:0)

在关闭它之前尝试冲洗它。

for(int x = words.length - 1; x >=0; x--) {
   bw.write(words[x] + " ");  // here it is not working
   // System.out.print(words[x]+" " );
}
bw.flush() ; // this should do it
bw.close() ;
fr.close() ;

答案 2 :(得分:0)

如果您使用Java 7 -The try-with-resources Statement,则无需关闭或刷新流。默认情况下,即使出现任何异常,也会处理它。

使用Collections.reverse来反转任何数组/列表的顺序。

示例代码:

try (BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"));
     BufferedReader reader = new BufferedReader(new FileReader("in.txt"))) {

    String msg = null;
    while ((msg = reader.readLine()) != null) {
        System.out.println(msg);
        String[] words = msg.split(" ");
        Collections.reverse(Arrays.asList(words));
        String reversedString = Arrays.toString(words);
        reversedString = reversedString.substring(1, reversedString.length()-1);
        System.out.println("The reversed words are : " + reversedString);
        writer.write(reversedString);
        writer.newLine();
    }
}

Read more...

答案 3 :(得分:0)

你没有冲洗流。 BufferedXXXStream有一个缓冲区

如果您没有close()流或flush(),那么数据会保留在缓冲区中。

为什么不使用Java 8高阶构造?

final Path in = Paths.get("src", "file", "in.txt");
final Path out = Paths.get("src", "file", "out.txt");
try (
        final Stream<String> lines = Files.lines(in);
        final PrintWriter outputStream = new PrintWriter(Files.newBufferedWriter(out));
) {
    lines.
            map(l -> l.split(" ")).
            map(Arrays::asList).
            forEach(l -> {
                Collections.reverse(l);
                l.forEach(outputStream::print);
                outputStream.println();
            });
}

答案 4 :(得分:0)

在java 7中执行此操作的正确方法是使用try with resources。

try (FileReader fr = new FileReader("src/file/in.txt"); FileWriter fw = new FileWriter("src/file/out.txt")) {

注意,这个的catch语句是可选的。在此示例中,您不需要对缓冲的读取器/写入器上的资源进行尝试,因为正在处理父类。

如果出现错误,尝试使用资源将处理关闭流。

每次操作后冲洗流是一个好习惯。在ewery写入后不要刷新,因为你失去了缓冲流的好处。在每次主要写入操作后刷新,这样您就不会丢失任何数据,以防程序崩溃。

每次写入后刷新就像在输入文章后输入每个字符后保存一样。

请注意,此功能已在java 7中添加,因此在java 6中无法使用,如果您需要支持旧版本,则需要手动关闭该流。