web-dev-qa-db-ja.com

Java.io.WinNTFileSystem.createFileExclusivelyでJava.io.Exceptionを取り除くのはホットですか?

私は現在、これまでに見たことのない例外に遭遇するという問題を抱えています。そのため、それを処理する方法がわかりません。

指定されたパラメータに従ってファイルを作成したいのですが、機能しません。

public static Path createFile(String destDir, String fileName) throws IOException {
        FileAccess.createDirectory( destDir);

        Path xpath = new Path( destDir + Path.SEPARATOR + fileName);

        if (! xpath.toFile().exists()) {
            xpath.toFile().createNewFile();
            if(FileAccess.TRACE_FILE)Trace.println1("<<< createFile " + xpath.toString() );
        }
      return xpath;
  }


  public static void createDirectory(String destDir) {
      Path dirpath = new Path(destDir);
      if (! dirpath.toFile().exists()) {
          dirpath.toFile().mkdir();
          if(TRACE_FILE)Trace.println1("<<< mkdir " + dirpath.toString() );
      }
  }

アプリケーションを実行するたびに、次の例外が発生します。

Java.io.IOException: The system cannot find the path specified
at Java.io.WinNTFileSystem.createFileExclusively(Native Method)
at Java.io.File.createNewFile(Unknown Source)
[...]

どうすればそれを取り除くことができますか? (私はWin7 64ビットを使用しています)

12
keinabel

問題は、含まれているパス全体(直接の親ディレクトリとその上のすべての親)がすでに存在しない限り、ファイルを作成できないことです。

パスc:\ Tempがあり、その下にサブディレクトリがない場合、c:\ Temp\SubDir\myfile.txtというファイルを作成しようとすると、C:\ Temp\SubDirが存在しないため失敗します。

   xpath.toFile().createNewFile(); 

追加

   xpath.toFile().mkdirs(); 

(mkdirs()がjustオブジェクト内のパスを必要とするかどうかはわかりません。必要な場合は、その新しい行を次のように変更します。

   new File(destDir).mkdirs();

それ以外の場合は、代わりにファイル名がサブディレクトリとして作成されます。 Windowsエクスプローラーをチェックして、作成されたディレクトリを確認することで、どちらが正しいかを確認できます。)

15
JTeagle