2014-03-27 52 views
0

我想在我的当前工作目录中创建一个具有url标题的目录。但是,我将该网址转换为散列,然后转换为十六进制,因此我尝试创建的目录名称类似于273212b1。但是,无论何时执行代码,它都会引发IOException,并且无法创建目录。我不确定我做错了什么。mkdir()Java一直抛出IOException

即使我做了类似File directory = new File(“Users/whatever/Documents”+ dirname);它不起作用。

+1

什么异常_说_? –

+0

尝试使用'directory.mkdirs();' 因为也许你还需要一些中间目录..(不只是一个级别的目录) –

+0

做一个System.out.println完整路径你尝试创建该文件,也许可以让你知道什么是错误的线索 –

回答

2

您不是使用散列或十六进制创建目录,而是尝试使用URL创建目录。以下是相关步骤:

被称为带S的方法=一些URL:

public static File mkdir(String s) throws IOException 

您复制网址到一个变量称为目录名称:

String dirname = s; 

您集合S是一个十六进制(不改变dirname的值):

s = Integer.toHexString(dirname.hashCode()); 

您创建一个File对象,代表有一个名字一个URL目录:

File directory = new File(dirname); 

当您尝试创建一个目录,它是不会,因为所有的URL是无效的目录名中的字符的工作。

你应该这样做:

File directory = new File(s); 

一旦你解决这个问题,你再会要处理的目录中的双创建如下:

if (directory.exists()) { 
    System.out.println("Directory already exists!"); 
} else { 
    success = directory.mkdir(); 
    if (success) { 
     System.out.println("Successful"); 
    } else { 
     throw new IOException("can't make directory for " + s); 
    } 
} 
3
success = directory.mkdir(); 

if (!directory.mkdir()) 

正在创建的目录两次,或尝试。第二次,它会失败,并抛出异常。

检查你的逻辑。这是多余的。你可以减少大部分到

if (!directory.exists() && !directory.mkdir()) 
{ 
    throw new IOException(...); 
} 

你不需要所有的输出。