使代码正常工作所需的最小更改是替换行
sc = new Scanner(String.valueOf(file)); // WRONG!!!
具有
file.close();
sc = new Scanner(new FileInputStream("D:\\test.txt"));
毫无疑问你在期待
String.valueOf(file)
以某种方式让您访问
目录
文件的
D:\test.txt
,在某种程度上
Scanner
然后可以阅读这些内容。
一
Formatter
只有
写
数据
;无法读取数据。为此,你需要一个
FileInputStream
.
所以,首先,通过关闭
格式化程序
:
file.close();
现在
D:\测试.txt
只是磁盘上的一个文件,现在可以用
文件输入流类
:
new FileInputStream("D:\\test.txt")
如果你愿意,你可以用
扫描仪
:
sc = new Scanner(new FileInputStream("D:\\test.txt"));
然后通过调用
扫描仪
方法。
下面是对示例进行更彻底的修改的版本,它更清楚地强调了写操作和读操作之间的分离:
public class Main
{
private static void writeFile(String fileName) throws FileNotFoundException
{
Formatter file = null;
try {
file = new Formatter(fileName);
file.format("%s %s", "Hello", "World");
} finally {
if (file != null) {
file.close();
}
}
}
private static void readFile(String fileName) throws FileNotFoundException
{
Scanner sc = null;
try {
sc = new Scanner(new FileInputStream(fileName));
while (sc.hasNext()) {
System.out.println(sc.next());
}
} finally {
if (sc != null) {
sc.close();
}
}
}
public static void main(String[] args)
{
final String fileName = "test.txt";
try {
writeFile(fileName);
readFile(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}