未使用createNewFile java方法创建文件
我有一个read方法,如果新文件不存在,它将尝试创建一个新文件,但是当我运行代码时,我得到一个(系统找不到指定的文件)错误。有人能解释一下为什么它不创建这个文件吗?我还想知道如何在父目录而不是当前保存的目录中创建文件 代码:未使用createNewFile java方法创建文件,java,java-io,Java,Java Io,我有一个read方法,如果新文件不存在,它将尝试创建一个新文件,但是当我运行代码时,我得到一个(系统找不到指定的文件)错误。有人能解释一下为什么它不创建这个文件吗?我还想知道如何在父目录而不是当前保存的目录中创建文件 代码: public Set<String> readWindowTitleSet() { try { File file = new File("windowData.out"); String absolutePath =
public Set<String> readWindowTitleSet() {
try {
File file = new File("windowData.out");
String absolutePath = file.getAbsolutePath();
String filePath = absolutePath.
substring(0,absolutePath.lastIndexOf(File.separator));
if (!file.exists()) {
file.createNewFile();
}
FileInputStream fis = new FileInputStream(filePath +"\\..\\" + "windowData.out");
// this is for testing in Eclipse.
//FileInputStream fis = new FileInputStream(absolutePath);
// This is for use in Jar file.
ObjectInputStream ois = new ObjectInputStream(fis);
anotherList = (HashSet<String>) ois.readObject();
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return anotherList;
}
public Set readWindowTitleSet(){
试一试{
File File=新文件(“windowData.out”);
字符串absolutePath=file.getAbsolutePath();
字符串filePath=绝对路径。
子字符串(0,absolutePath.lastIndexOf(File.separator));
如果(!file.exists()){
createNewFile();
}
FileInputStream fis=新的FileInputStream(filePath+“\\..\\\”+“windowData.out”);
//这是为了在Eclipse中进行测试。
//FileInputStream fis=新的FileInputStream(绝对路径);
//这是在Jar文件中使用的。
ObjectInputStream ois=新ObjectInputStream(fis);
另一个列表=(HashSet)ois.readObject();
ois.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回另一个列表;
}
错误
java.io.FileNotFoundException: C:\Users\Joe\workspace\VocabTool\..\windowData.out (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:60)
at model.WindowTitleDataStore.<init>(WindowTitleDataStore.java:18)
at controller.InterruptionDecision.<clinit>(InterruptionDecision.java:23)
at view.MainGui.<init>(MainGui.java:29)
at view.MainGui.main(MainGui.java:38)
Exception in thread "main" java.lang.ExceptionInInitializerError
at view.MainGui.<init>(MainGui.java:29)
at view.MainGui.main(MainGui.java:38)
Caused by: java.lang.NullPointerException
at model.WindowTitleDataStore.<init>(WindowTitleDataStore.java:19)
at controller.InterruptionDecision.<clinit>(InterruptionDecision.java:23)
... 2 more
java.io.FileNotFoundException:C:\Users\Joe\workspace\VocabTool\..\windowData.out(系统找不到指定的文件)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(未知源)
位于java.io.FileInputStream。(未知源)
在model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:60)中
位于model.WindowTitleDataStore。(WindowTitleDataStore.java:18)
在controller.interruptondecision.(interruptondecision.java:23)
MainGui.(MainGui.java:29)
MainGui.main(MainGui.java:38)
线程“main”java.lang.ExceptionInInitializeError中出现异常
MainGui.(MainGui.java:29)
MainGui.main(MainGui.java:38)
原因:java.lang.NullPointerException
位于model.WindowTitleDataStore。(WindowTitleDataStore.java:19)
在controller.interruptondecision.(interruptondecision.java:23)
... 还有两个
路径更改后出现错误
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:63)
at controller.InterruptionDecision.interruptNow(InterruptionDecision.java:165)
at controller.InterruptionDecision.updateWindowTitle(InterruptionDecision.java:74)
at controller.FocusWindowName.getFocusWindowTitle(FocusWindowName.java:27)
at controller.FocusWindowName.run(FocusWindowName.java:42)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-6" java.lang.NullPointerException
at model.WindowTitleDataStore.getWindowDataSize(WindowTitleDataStore.java:105)
at controller.InterruptionDecision.getWindowDataStoreSize(InterruptionDecision.java:95)
at controller.InterruptionDecision.interruptNow(InterruptionDecision.java:168)
at controller.InterruptionDecision.updateWindowTitle(InterruptionDecision.java:74)
at controller.FocusWindowName.getFocusWindowTitle(FocusWindowName.java:27)
at controller.FocusWindowName.run(FocusWindowName.java:42)
at java.lang.Thread.run(Unknown Source)
java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源)
位于java.io.ObjectInputStream.readStreamHeader(未知源)
位于java.io.ObjectInputStream。(未知源)
在model.WindowTitleDataStore.readWindowTitleSet(WindowTitleDataStore.java:63)中
在controller.interruptOnDecision.interruptNow(interruptOnDecision.java:165)
在controller.interruptOnDecision.updateWindowTitle(interruptOnDecision.java:74)
位于controller.FocusWindowName.getFocusWindowTitle(FocusWindowName.java:27)
运行(FocusWindowName.java:42)
位于java.lang.Thread.run(未知源)
线程“thread-6”java.lang.NullPointerException中出现异常
位于model.WindowTitleDataStore.getWindowDataSize(WindowTitleDataStore.java:105)
位于controller.interruptondecision.getWindowDataStoreSize(interruptondecision.java:95)
在controller.interruptOnDecision.interruptNow(interruptOnDecision.java:168)
在controller.interruptOnDecision.updateWindowTitle(interruptOnDecision.java:74)
位于controller.FocusWindowName.getFocusWindowTitle(FocusWindowName.java:27)
运行(FocusWindowName.java:42)
位于java.lang.Thread.run(未知源)
从路径中删除该。
应该是FileInputStream fis=新的FileInputStream(filePath+“\\windowData.out”)代码>
而不是
FileInputStream fis=新的FileInputStream(filePath+“\\\…\”+“windowData.out”)代码>
因为filePath+“\\\\\\\\\\\\”+“windowData.out”
将等于C:\Users\Joe\workspace\VocabTool\\\\\\\\\ windowData.out,它不是文件的有效位置
而filePath+“\\windowData.out”
将等于C:\Users\Joe\workspace\VocabTool\windowData.out
这是您的文件的有效位置(我猜您在指定的目录中有一个文件windowData.out)尝试删除“\\…\”然后再试一次?那么,从您刚刚创建的文件中读取一个空文件有什么意义呢?为什么不使用实例化FieldPixSt流时刚刚创建的文件对象,而不是重新创建文件路径?如果使用java SE 7,考虑使用新的NiO 2文件API。我理解您的观点,我应该移动它,以便在程序执行的开始时检查和/或创建文件。不过,我的文件未被创建的问题仍然存在。我最近才开始使用Java IO。实际上,它应该是FileInputStream fis=newfileinputstream(file)代码>。我刚刚显示了OP造成的文件路径错误。我更改了文件路径,现在我得到了一个新错误:java.io.EOFException位于java.io.ObjectInputStream$PeekInputStream.readFully(未知源代码)位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源代码)位于java.io.ObjectInputStream.readStreamHeader(未知源代码)位于java.io.ObjectInputStream。(未知源代码)
您能发布整个堆栈跟踪吗。@Abu我将其放在原始日志中,因为它太长,无法在注释中发布。