使用String concat创建新目录是不可能的

时间:2014-09-08 10:09:55

标签: java mkdir

我正在尝试使用Java创建一个新目录,但我意识到mkdir()不适用于由concat()方法或使用'+'操作数组成的字符串。

例如:

String keyword = "golden+retriever";
String folderName = removeChar(keyword);
String strDirectory = "C:/Users/Administrator/Desktop/"+folderName;
File newFolder = new File(strDirectory);

newFolder.mkdir();

上面的代码没有创建文件夹,但是如果我使用不带'+'操作数的目录,它将正常工作:

String strDirectory = "C:/Users/Administrator/Desktop/goldenretriever";
File newFolder = new File(strDirectory);

newFolder.mkdir();

为什么会这样?有没有办法使用'+'操作数或concat()方法成功创建目录?

更新 字符串中的'+'不是拼写错误。 removeChar()方法只是删除'+'以创建没有特殊字符的文件夹。

以下是removeChar()的代码:

public static String removeChar(String s)
{
    StringBuffer buff = new StringBuffer(s.length());
    buff.setLength(s.length());
    int current = 0;

    for (int i=0; i<s.length(); i++)
    {
        char cur = s.charAt(i);
        if(cur != '+')
        {
            buff.setCharAt(current++, cur);
        }
    }

    return buff.toString();
}

3 个答案:

答案 0 :(得分:0)

请确保您的路径正确,否则Windows允许+作为文件夹名称。 例如,如果我有以下URL:C:/ TestWS / Test / TestingDir /那么你的关键字

String keyword = "golden+retriever";

Java没有自动创建所有目录所以请在创建final关键字dir之前确保该路径已经存在:C:/ TestWS / Test / TestingDir /

如果TestingDir不存在并且尝试创建&#34; golden + retriever&#34 ;;然后java将不会创建任何目录。

答案 1 :(得分:0)

您的代码有什么问题,removeChar会在关键字后面返回多余的空格。您可以做的是在创建文件之前先修剪它。

尝试:

File newFolder = new File(strDirectory.trim());

我还建议您在创建文件夹之前先检查文件夹是否存在

if(!newFolder.exists()) {            
    newFolder.mkdir();
}

答案 2 :(得分:0)

虽然最初的海报已经采用另一种更有效的解决方案来解决问题,但我想指出为什么他们的原始代码失败了。

他们创建了一个新的StringBuffer,并在顶部制作了s的副本。他们将初始长度设置为等于原始字符串s的长度。如果他们删除了任何数量的加号,则新字符串实际上小于原始字符串。为了确保StringBuffer的长度正确且没有未使用的尾随字符,您必须在完成后相应地设置长度。

要修复原始代码,需要更改:

return buff.toString();

要:

buff.setLength(current);
return buff.toString();

可能会重新编写代码,因此新的StringBuffer buff开始为空,只需根据需要添加新字符。这可以通过以下方式完成:

public static String removeChar(String s)
{
    StringBuffer buff = new StringBuffer();

    for (int i=0; i<s.length(); i++)
    {
        char cur = s.charAt(i);
        if(cur != '+')
            buff.append(cur);
    }
    return buff.toString();
}