簡體   English   中英

以相反的順序寫入行

[英]Writing to the line in Reverse Order

我想以相反的順序寫行,例如輸入:行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();
}

關閉流

       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) {

        }

在關閉它之前,請嘗試沖洗它。

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() ;

如果使用Java 7-try-with-resources語句,則無需關閉或刷新流。 默認情況下,即使發生任何異常,也會對其進行處理。

使用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();
    }
}

閱讀更多...

您沒有沖洗流。 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();
            });
}

在Java 7中執行此操作的正確方法是對資源使用try。

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

注意,為此的catch語句是可選的。 在此示例中,您無需對緩沖的讀取器/寫入器上的資源進行嘗試,因為正在處理父類。

如果出現錯誤,嘗試使用資源將處理關閉流。

在每次操作后沖洗流是一個好習慣。 丟失寫操作后,請不要刷新,因為這樣會失去緩沖流的好處。 每次執行主要寫操作后均進行刷新,以免程序崩潰時不會丟失任何數據。

每次寫完之后刷新,就像在鍵入文章時鍵入每個字符后保存一樣。

請注意,此功能是在Java 7中添加的,因此在Java 6中將不起作用,如果您需要支持較早的發行版,則需要手動關閉流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM