使用 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
所以我有一个包含一行 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