我想以相反的顺序写行 输入:第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();
}
答案 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();
}
}
答案 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中无法使用,如果您需要支持旧版本,则需要手动关闭该流。