我正在尝试使用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();
}
答案 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();
}