如何反转文件读取?

时间:2017-10-23 20:34:30

标签: java file-io reverse

如何反转.txt文件的输出? 一个例子:

输入文件内容:

这是文件的开头。

第二行。

这是第三行。

第四行。

文件的结尾。

应该读入并打印以下文件:

文件的结尾。

第四行。

这是第三行。

第二行。

这是文件的开头。

这是我目前的代码:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileCopier {

     public static void copyCharacters() throws IOException {
            FileReader inputStream = null;
            FileWriter outputStream = null;

            try {
                inputStream = new FileReader("Motown.txt");
                outputStream = new FileWriter("Motown_output.txt");

                int c;
                while ((c = inputStream.read()) != -1) {
                    outputStream.write(c);
                }
            } finally {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
            }
         }
    public static void main(String[] args) {
         // TODO Auto-generated method stub
        try {
            copyCharacters();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

你应该能够

  1. 逐行阅读您的输入
  2. 将每一行读入集合
  3. 反转集合
  4. 在这里,我正在使用Deque并获得它的descendingIterator:

     public static void copyCharacters() throws IOException {
                FileWriter outputStream = null;
                BufferedReader bufferedReader = null;
    
                Deque<String> fileContents = new ArrayDeque<>();
    
                try {
                    outputStream = new FileWriter("motown_output.txt");
                    bufferedReader = new BufferedReader(new FileReader("motown.txt"));
    
                    String line;
                    while ((line = bufferedReader.readLine()) != null) {
                        fileContents.add(line);
                    }
    
                    for (Iterator<String> iterator = fileContents.descendingIterator(); iterator.hasNext();) {
                        outputStream.write(iterator.next());
                        outputStream.write("\n");
                    }
    
                } finally {
                    if (bufferedReader != null) {
                        bufferedReader.close();
                    }
                    if (outputStream != null) {
                        outputStream.close();
                    }
                }
             }