Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 目录名中有空格的文件对象_Java_File Io - Fatal编程技术网

Java 目录名中有空格的文件对象

Java 目录名中有空格的文件对象,java,file-io,Java,File Io,我试图列出目录中的文件数。但我不能这样做,我怀疑这与父目录名中的空白有关。 我所做的是在.properties文件中,将值设置为- dir.loc=H:/Main/dir one/dir - two/dir3/dir four dir.name=Run 现在在jave文件中,我将这些值设置为字符串变量,如下所示- String s1 = properties.getProperty("dir.loc"); String s2 = properties.getProperty("dir.na

我试图列出目录中的文件数。但我不能这样做,我怀疑这与父目录名中的空白有关。
我所做的是在.properties文件中,将值设置为-

dir.loc=H:/Main/dir one/dir - two/dir3/dir four  
dir.name=Run
现在在jave文件中,我将这些值设置为字符串变量,如下所示-

String s1 = properties.getProperty("dir.loc");
String s2 = properties.getProperty("dir.name");
我将文件对象创建为-

File f = new File(s1, s2);
File[] fList = f.listFiles();  
现在这里的
fList
null

H驱动器位于另一台远程计算机上,我估计java程序会尝试在本地定位“Run”目录,而不是在H驱动器上找到它,因为它没有找到“Run”,所以列表返回
null

当我尝试在一个简单的java类中使用-

File f = new File("H:/Main/dir one/dir - two/dir3/dir four", "Run");  
然后我用
f.listFiles().length得到结果

所以我想它可能需要从属性文件中提取值并将其分配给字符串变量

我的假设正确吗?

这个问题的可能解决方案是什么

是的,你是对的。从属性文件中读取值时,这些值会出错。 改为这样做:

dir.loc="H:/Main/dir one/dir - two/dir3/dir four" 

看起来您只需要调整属性的值。 在您显示的代码中

  dir.loc=H:/Main/dir one/dir - two/dir3/dir four   
有尾随空格

这是否:

String s1 = properties.getProperty("dir.loc").trim();
String s2 = properties.getProperty("dir.name").trim();

修复它?

好的,我找到了解决问题的方法,其实很简单。
我做了以下事情-

在属性文件中-

dir.loc=H:/Main/dir one/dir - two/dir3/dir four/Run
在配置java文件中-

String s1 = properties.getProperty("dir.loc");
在我的java程序中-

File tempF = new File(s1);
File dirLoc = new File(tempF.getAbsolutePath());
dirLoc.listFiles().length给出一个数字

@barti_ddu关于getAbsolutePath()的评论让我开始思考可能正在使用它。
这个解决方案有什么问题吗?还是不太合适


谢谢大家。

非常抱歉,这里只是输入错误,但实际值不包含任何尾随空格。抱歉,不起作用。我正在尝试各种方法来解决这个问题。用escape char等,还没有成功。但是当我使用“正如你所建议的那样,然后当我使用sysout
f.getName()
时,结果是
Run”
@Swift-Tuttle不确定我是否理解你的评论,你说的“不起作用”是什么意思?如果你做一个
System.out.println(dir.loc)
它是否显示正确的值?如果我做一个
System.out.println(dir.loc)
它的o/p是
“H:/Main/dir-one/dir-two/dir3/dir-four”
。因此,为了创建文件对象,我将包含此项的字符串变量作为第一个参数传递,并将包含Run的字符串变量传递。然后
getAbsolutePath()
作为
c:\ProgramFiles\eclipse\“H:\Main\dir one\dir-two\dir3\dir four”\Run
getName()
作为Run如何加载属性以及
新文件(s1,s2)的值是多少。getAbsolutePath()
?这是
getAbsolutePath()的打印内容
作为'H:\Main\dir one\dir-two\dir3\dir four\Run',我只是作为-
properties.load(Thread.currentThread.getContextClassLoader().getResourceAsStream(“Test.properties”))加载属性文件嗯,这似乎和你的“直接”例子没什么不同,奇怪的是。重新检查您对驱动器“H”的访问权限;此外,您还可以尝试设置UNC路径(以
\\machine\share\target
的形式)。@barti\u ddu能够解决此问题,并发布了我的解决方案。