我如何向后读取整数文件

时间:2019-09-06 07:54:45

标签: java file int reverse

我的老师给我们做了作业,以反转整数文件。 可以说我有一个包含1,2,3,4,5的文件。 我的作业是将其反转并将其写入文件,使其包含5,4,3,2,1。 我已经用List做到了。而且有效。 但是我的老师告诉我不要使用List。 有人可以帮我吗?

static void getNumFiles(File file){
    InputStream inputStream = null;
    OutputStream outputStream = null;
    List<Integer> list = new ArrayList<>();

    int actuallyRead = 0;
    byte[] buffer = new byte[4];
    int[] arr = new int[list.size()];
    int counter = list.size();
    int x = 0;
    try {
        inputStream = new FileInputStream(file);

        outputStream = new FileOutputStream(file);


        while((actuallyRead = inputStream.read(buffer)) != -1){
            x = ByteBuffer.wrap(buffer).getInt();
            list.add(x);
        }

        for (int i = 0; i < arr.length; i++) {
            arr[i] = list.get(list.size() - i) ;
        }

        exampleWriteIntegerArray(arr, file);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

此答案假定所讨论的文件是简单文本文件。原始问题中的文件类型不清楚。

只是一小段代码,无需使用列表即可完成您的分配。 它读取输入文件,并使用StringBuilder反转输入。然后可以将反转的输入写到所需的输出位置。

public static void main(final String[] args) {
    try {
        String fileContent = new String(Files.readAllBytes(Paths.get("D:/12345.txt"))); // Read file
        StringBuilder sb = new StringBuilder(fileContent);
        String reversedContent = sb.reverse().toString();
        PrintWriter writer = new PrintWriter(new File("D:/54321.txt")); // Create new file and output the reversed String.
        writer.println(reversedContent);
        writer.close();
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
}

输入:1、2、3、4、5 输出:5,4,3,2,1

答案 1 :(得分:0)

从您的问题中并不能完全清楚您的老师对您的期望是什么。同样,该文件看起来像是具有整数的二进制文件,而不是具有整数值的文本文件。 如果是这样,则无需为您编写程序:

RandomAccessFile格式打开文件。

使用其length()函数来确定其中包含多少个整数(请注意,长度以字节为单位,而整数是32位)。

使用seek()方法移至文件中的最后一个int位置,使用readInt()进行读取,然后输出。

在此之前移一个位置,执行相同的操作,直到到达位置0-此时您已读取了整个文件。

答案 2 :(得分:0)

如果使用String的反向函数,则无法处理以下情况250,150,623更改为326,051,052

而且我也无法清楚地了解您的文件上下文。它是否包含,字符作为分隔符?如果不是,文件的分隔符是什么?

在我开始回答时,我说你不能处理。但是,如果您知道文件分隔符是什么,则可以将@ProfessionalCode的代码与这些附加内容一起使用,

public static void main(final String[] args) {
    try {
         String fileContent = new String(Files.readAllBytes(Paths.get("D:/12345.txt"))); // Read file
         StringBuilder sb = new StringBuilder(fileContent);
         String reversedContent = sb.reverse().toString();
         char delimiter = " "; //let say it is whitespace 
         String temp = ""; //it will use between two delimiters to get reverse String
         PrintWriter writer = new PrintWriter(new File("D:/54321.txt")); // Create new file and output the reversed String
         for (int i = 0; i < reversedContent.length(); i++){
             if(reverseContent.charAt(i) == delimiter){
                 writer.print(temp.reverse().toString());
                 writer.print(delimiter.reverse().toString()); //writing your delimiter between all numbers, if it is like ",-" it needed to be reversed to "-,"
                 temp = "";
             }else{
                 temp += reverseContent.charAt(i);
             }
         }
         writer.print(temp.reverse().toString()); //for last number
         writer.close();
    }catch (IOException ex) {
         ex.printStackTrace();
    }

}