使用 InputStream 读取文件

Read a file with InputStream

所以我有一个包含一行 int 的文件:5551212

我正在尝试使用 InputStream 读取此文件,然后查看是否可以提取其中写入的数字

我做了以下步骤:

import java.io.*;

class Shuffle {


    public static void main(String args[]) throws IOException {
        FileInputStream newfile = new FileInputStream("file path");
        System.out.println(newfile.getChannel());
        System.out.println(newfile.getFD()); 
        System.out.println("Number of remaining bytes:"+newfile.available());
        int data;
        while ((data = newfile.read()) != -1) {
            System.out.print(data + " ");   
        }
        newfile.close();
    }  
}

然而,我得到的输出是:53, 53, 53, 49, 50, 49, 50

我不太确定这代表什么,或者我不确定如何对整数使用 InputStream

您正在阅读的文件是一个文本文件,因此您收到的字节代表编码字符。如果您查看十进制值 53 处的 ascii table(例如 http://www.asciitable.com/),您会看到它对应于一个字符“5”

您正在读取一个 int,文件是文本数据,而不是二进制数据。因此,文件中的任何字节都被解释为二进制,并且您得到这些数字。

要从文本文件中读取,您可以使用扫描仪,或者先读取为文本,然后再转换为 int。

import java.io.*;

class Shuffle {
    public static void main(String args[]) throws IOException {
        try (InputStream file = new FileInputStream("file.txt");
             InputStreamReader in = new InputStreamReader(file);
             BufferedReader r = new BufferedReader(in)) {
            String line = r.readLine();
            while (line != null) {
                int number = Integer.parseInt(line);
                System.out.println(number);
                line = r.readLine();
            }
        }
    }
 }  

此代码还使用了 try-with-resources,确保所有读取器和文件最后都关闭,即使抛出异常也是如此。

使用 Java 11 或更高版本,可以使用一行代码读取文件 - Files.readString

这是一个读取文本文件的工作示例:

// File name:  ReadFile.java

import java.nio.file.*;

public class ReadFile {

    public static void main(String[] args) throws Exception {
        String path = "my-file.txt";
        // Read file content as a string
        System.out.println(Files.readString(Paths.get(path)));
    }
}

输出:

> javac ReadFile.java

> java ReadFile
   5551212