1

テスト中の次のコードがあります

public class TestMe {
  private static final String BACKUP_DIR_PATH = "~/backup";

  @Test
  public static void createBackupDir() throws IOException {
    File path = new File(BACKUP_DIR_PATH + "/" + getFolderName()).getCanonicalFile();
    System.out.println(path.mkdirs());
  }

  // returns 2012-07-23
  private static String getFolderName() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = new Date();
    return dateFormat.format(date).toString();
  }
}

このテストを実行すると、false

backup2012-07-23フォルダの両方が存在しません

ここで何が間違っていますか?

4

3 に答える 3

10

~これはおそらく、Javaがその意味を知らないためです。

これ~はシェル拡張であり、有効なパス名ではありません。

于 2012-07-24T20:47:25.980 に答える
4

これを試して:

 private static final File HOME_DIR = new File(System.getProperty("user.home"));
 private static final File BACKUP_DIR = new File(HOME_DIR, "backup");

そこから行きます。一般に、あなたがしているように文字列を追加することによってパスを構築することを避ける方が良いです。代わりにメソッドを使用しFileてパスを作成してください。

ユーザーのホームディレクトリプロパティの取得は、インストールされているセキュリティマネージャによる承認の対象となるため、コードはを処理できるように準備する必要があることに注意してくださいSecurityException

于 2012-07-24T20:52:25.327 に答える
0

Windowsシステムで実行していますか?その場合は、「/」の代わりにFile.separatorを使用して、コードがプラットフォームに依存しないようにすることを検討してください。

また、「〜」の代わりにSystem.getProperty( "user.home"))を使用して、プラットフォームに依存しないようにします。

于 2012-07-24T20:50:37.323 に答える