[英]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.