未使用createNewFile java方法创建文件

未使用createNewFile java方法创建文件,java,java-io,Java,Java Io,我有一个read方法,如果新文件不存在,它将尝试创建一个新文件,但是当我运行代码时,我得到一个(系统找不到指定的文件)错误。有人能解释一下为什么它不创建这个文件吗?我还想知道如何在父目录而不是当前保存的目录中创建文件 代码: public Set<String> readWindowTitleSet() { try { File file = new File("windowData.out"); String absolutePath =

我有一个read方法,如果新文件不存在,它将尝试创建一个新文件,但是当我运行代码时,我得到一个(系统找不到指定的文件)错误。有人能解释一下为什么它不创建这个文件吗?我还想知道如何在父目录而不是当前保存的目录中创建文件

代码:

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我将其放在原始日志中,因为它太长,无法在注释中发布。