2012-03-18 53 views
0

我有一个提供目录名称的Java程序,使用dirName.listFiles()获取该目录中的所有文件的列表,然后遍历每个文件解析来自它们的文件信息。使用SVN版本控制系统时出现Java IO问题

这些文件通常都只是普通的文本文件,但我使用SVN,并似乎有一个在我的dirName目录下名为.svn目录,这是造成我的计划失败,因为.svn是一个目录,而不是一个文本文件。

现在,我可以实现使用FileFilter对象的过滤器,但我真的只希望文本文件在最终程序中的目录中。

我的问题是:有没有办法绕过我的问题,而不使用FileFilter?我也认为我的程序忽略了我编写的其他程序中的.svn目录,所以我不知道现在为什么它是一个问题。

在此先感谢。

+0

我真的不明白这个问题。你希望能够过滤目录列表,但不使用'FileFilter'? – 2012-03-18 11:36:27

+0

@Oli - 我觉得SVN的工作方式不应该以这种方式干扰我的程序。但基本上我意识到我应该只使用FileFilter。如果'.svn'目录正在执行此操作,那么我的程序显然不够健壮。感谢您的回复。 – Joe 2012-03-18 12:06:04

回答

2

对于许多版本控制系统(不仅仅是SVN),你会遇到这个问题,因为它们中的一些文件在磁盘上有助于识别工作副本的来源(.svn for SVN,view.dat for clearcase)。你真的应该只是实施的FileFilter排除那些,或使用来自公共-IO的那些:

makeSvnAware

这是空安全,所以如果你给它空输入,它只是返回一个SVN过滤器为您服务。如果你给它另一个IOFileFilter(FileFilter的一个子接口),它只会返回一个在现有过滤器和svn过滤器之间执行AND的操作。

FileFilter svnFilter = FileFilterUtils.makeSvnAware(null); 
1

您可以在listFiles()返回的每个对象上调用isDirectory()

1
不是使用Java进行文件和目录寻找更好的

,我宁愿写一个jni程序,并使用C的dirent.h和stat.h来区分文件秒。 jni程序会更快。

1

如果dirName不是你的工作拷贝的根目录下,你可以升级到SVN的最新版本。这个目录没有每个目录的.svn目录,只有根目录。