Java 保存txt文件时出现“找不到文件”错误
我在文件保存方面有问题Java 保存txt文件时出现“找不到文件”错误,java,file-io,runtime-error,java.util.scanner,filenotfoundexception,Java,File Io,Runtime Error,Java.util.scanner,Filenotfoundexception,我在文件保存方面有问题 error: dec 11, 2012 4:56:18 PM tetris.FileIO loadHighscores SEVERE: null java.io.FileNotFoundException: file:\C:\Users\Koen\Dropbox\2TI\vgo\Eindwerk\Tetris\build\classes\tetris\LineHighscores.txt (De syntaxis van de bestandsnaam, mapnaam
error:
dec 11, 2012 4:56:18 PM tetris.FileIO loadHighscores
SEVERE: null
java.io.FileNotFoundException: file:\C:\Users\Koen\Dropbox\2TI\vgo\Eindwerk\Tetris\build\classes\tetris\LineHighscores.txt (De syntaxis van de bestandsnaam, mapnaam of volumenaam is onjuist)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.util.Scanner.<init>(Scanner.java:656)
at tetris.FileIO.loadHighscores(FileIO.java:44)
at tetris.FileIO.getLineScores(FileIO.java:31)
at tetris.FileIO.main(FileIO.java:69)
Exception in thread "main" java.lang.NullPointerException
at tetris.FileIO.loadHighscores(FileIO.java:49)
at tetris.FileIO.getLineScores(FileIO.java:31)
at tetris.FileIO.main(FileIO.java:69)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
问题是您没有向
新文件
传递有效路径this.getClass().getResource(“LineHighscores.txt”)
返回URL对象。然后,您将获得URL对象的字符串表示形式
但是当调用新文件(字符串)
时,构造函数需要的是路径名,而不是包含File://URL的字符串。由于“文件:\C:\Users\Koen\Dropbox\2TI\vgo\Eindwerk\Tetris\build\classes\Tetris\LineHighscores.txt”不是有效的Windows路径名,因此引发异常
有几种方法可以解决这个问题。一个简单的方法是使用getResourceAsStream
而不是getResource().toString()
。然后改变
public String[][] loadHighscores(String path){
int x=0;
String test = "";
file = new File(path);
try {
filescScanner = new Scanner(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex);
}
到
这将允许您直接读取输入文件。而且loadHighScores
不再关心数据是来自实际文件还是其他位置。如果您需要读取类路径上jar文件中的资源,这将非常方便。您无法将其作为文件直接读取,但使用getResourceAsStream可以为您提供内容
public class FileIO {
private File file;
private Scanner filescScanner, lineScanner;
private Writer fileWriter, lineWriter;
private String[][] data;
public FileIO () {
String[][] data = new String[100][1];
}
public String[][] getLineScores(){
return this.loadHighscores(this.getClass().getResource("LineHighscores.txt").toString());
}
public String[][] getTimeScores(){
return this.loadHighscores(this.getClass().getResource("TimeHighscores.txt").toString());
}
public String[][] loadHighscores(String path){
int x=0;
String test = "";
file = new File(path);
try {
filescScanner = new Scanner(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(file.toString());
while((test=filescScanner.nextLine())!=null) {
lineScanner = new Scanner(test);
lineScanner.useDelimiter("-/-");
System.out.println(lineScanner);
System.out.println(lineScanner.toString());
data[x][0]=lineScanner.next();//name
data[x][1]=lineScanner.next();//data
x++;
}
lineScanner.close();
filescScanner.close();
return data;
}
public static void main(String[] args){
FileIO file = new FileIO();
System.out.println(file.getLineScores());
}
}
public String[][] loadHighscores(String path){
int x=0;
String test = "";
file = new File(path);
try {
filescScanner = new Scanner(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(FileIO.class.getName()).log(Level.SEVERE, null, ex);
}
public String[][] loadHighscores(InputStream resourceStream){
int x=0;
String test = "";
filescScanner = new Scanner(resourceStream);