2012-07-24 91 views
1

我已经在测试下面的代码的Java:创建目录失败

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文件夹什么在这里不正确?

+0

你检查过运行jar的用户是否有足够的权限在那里创建文件夹? – 2012-07-24 20:46:45

+0

drwxr-xr-x + 64我的工作人员2176 Jul 23 13:32 me – daydreamer 2012-07-24 20:47:43

回答

10

这可能是因为Java不知道~的含义。

~是一个shell扩展,而不是有效的路径名。

+0

我该如何让java了解〜? – daydreamer 2012-07-24 20:49:36

+1

@dayDreamer你不能。 – jn1kk 2012-07-24 20:50:11

+0

@daydreamer你必须手动输入主目录的路径,替换'〜'。或者如果你是从你的主目录运行它,你可以给它一个相对路径,如'。/' – 2012-07-24 20:51:12

0

你在windows系统上运行它吗?如果是这样,考虑使用File.separator而不是“/”,以便代码与平台无关。

另外使用System.getProperty(“user.home”))而不是“〜”使它与平台无关。

+1

我在Mac上运行,因为Java不能识别〜 – daydreamer 2012-07-24 20:51:03

+0

好吧,使用File.seperator或上面提到的其他File方法Ted仍然会更安全。 – 2012-07-24 22:52:07

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