0

存在しない場合に新しいファイルを作成しようとする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;

}

エラー

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.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)
4

1 に答える 1

1

..あなたのパスからそれを削除します

そのはず
FileInputStream fis = new FileInputStream(filePath +"\\windowData.out");

それ以外の
FileInputStream fis = new 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というファイルがあると思います)

于 2013-02-16T16:40:08.757 に答える