2011-12-15 69 views
1

我想列出目录中文件的数量。但我无法这样做,我怀疑它与父目录名称中的空格有关。
什么我做的是在.properties文件中我设置为值 -目录名中带有空格的文件对象

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

现在在java的文件,我设置这些值的字符串变量 -

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

我创建了一个文件对象 -

File f = new File(s1, s2); 
File[] fList = f.listFiles(); 

现在,这里的fListnull;
H驱动器在另一台远程机器上,我认为java程序试图在本地定位'运行'目录,而不是在H驱动器上找到它,并且因为它找不到'运行'列表返回null

当我在一个简单的Java类尝试作为 -

File f = new File("H:/Main/dir one/dir - two/dir3/dir four", "Run"); 

然后我得到与f.listFiles().length;

所以结果我猜它可能必须做一些与提取值从属性文件和分配给一个String变量。

我的假设是否正确?
这个问题有什么可能的解决办法?

+0

如何加载属性以及`new File(s1,s2).getAbsolutePath()`的值是什么? – 2011-12-15 10:38:35

+0

这就是'getAbsolutePath()`得到的打印为'H:\ Main \ dir one \ dir - two \ dir3 \ dir four \ Run',我将属性文件简单地加载为``properties.load(Thread。 currentThread).getContextClassLoader()。getResourceAsStream(“Test.properties”));` – 2011-12-15 10:49:20

+0

好吧,它似乎没有什么不同,在你的“直接”例子中,那有什么奇怪的。在驱动器“H”上重新检查您的访问权限;此外,您可以尝试设置UNC路径(以\\ machine \ share \ target`的形式)。 – 2011-12-15 11:54:07

回答

1

好吧,我发现我的问题的解决方案,其实很简单。
我做了以下 -

在属性文件 -

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()的评论让我陷入了一些想法,可能会使用它。
这个解决方案有什么问题,或者不太像样?

谢谢大家。

2

是的,你是对的。当从属性文件中读取值时,就会搞乱数值。 而不是这样做:

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

它看起来像你只需要修剪你的属性值。 在您显示的代码中,

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(); 

解决这个问题?