使用SVN版本控制系统时的Java IO问题

使用SVN版本控制系统时的Java IO问题,java,svn,Java,Svn,我有一个Java程序,它提供了一个目录名,使用dirName.listFiles()获取该目录中所有文件的列表,然后遍历每个文件,解析其中的信息 这些文件通常都是普通的文本文件,但我使用的是SVN,在我的dirName目录中似乎有一个名为.SVN的目录,这导致我的程序失败,因为.SVN是一个目录而不是文本文件 现在,我可以使用FileFilter对象实现过滤器,但我实际上只希望文本文件在最终程序中位于该目录中 我的问题是:有没有办法不使用文件过滤器来解决我的问题?我还认为我的程序忽略了我编写的其

我有一个Java程序,它提供了一个目录名,使用
dirName.listFiles()
获取该目录中所有文件的列表,然后遍历每个文件,解析其中的信息

这些文件通常都是普通的文本文件,但我使用的是SVN,在我的
dirName
目录中似乎有一个名为
.SVN
的目录,这导致我的程序失败,因为
.SVN
是一个目录而不是文本文件

现在,我可以使用
FileFilter
对象实现过滤器,但我实际上只希望文本文件在最终程序中位于该目录中

我的问题是:有没有办法不使用文件过滤器来解决我的问题?我还认为我的程序忽略了我编写的其他程序中的
.svn
目录,所以我不确定为什么现在会出现这个问题


提前感谢。

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

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

两种可能的解决方案(至少):

  • FileFilter
    FileNameFilter
  • isFile()
  • 请看这里:

    两种可能的解决方案(至少):

  • FileFilter
    FileNameFilter
  • isFile()

  • 看看这里:

    比起使用java进行文件和目录搜索,我更喜欢编写一个jni程序,并使用C的dirent.h和stat.h来区分文件。jni程序会快得多。

    与使用java进行文件和目录搜索相比,我更喜欢编写jni程序,并使用C的dirent.h和stat.h来区分文件。jni程序会快得多。

    许多版本控制系统(不仅仅是SVN)都会出现这个问题,因为其中一些系统的磁盘上有文件,可以帮助识别工作副本的来源(.SVN代表SVN,view.dat代表clearcase)。您确实应该实现一个文件过滤器来排除这些文件,或者使用commons io中的文件过滤器:

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

    FileFilter svnFilter = FileFilterUtils.makeSvnAware(null);
    

    许多版本控制系统(不仅仅是SVN)都会出现这个问题,因为其中一些系统的磁盘上有文件,可以帮助识别工作副本的来源(.SVN代表SVN,view.dat代表clearcase)。您确实应该实现一个文件过滤器来排除这些文件,或者使用commons io中的文件过滤器:

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

    FileFilter svnFilter = FileFilterUtils.makeSvnAware(null);
    

    如果
    dirName
    不是工作副本的根目录,则可以升级到svn的最新版本。不是每个目录都有一个.svn目录,而只是根目录。

    如果
    dirName
    不是工作副本的根目录,您可以升级到最新版本的svn。这并不是每个目录都有一个.svn目录,而只是根目录。

    我真的不明白这个问题。您希望能够过滤目录列表,但不使用
    文件过滤器
    ?@Oli-我觉得SVN的工作方式不应该以这种方式干扰我的程序。但基本上我意识到我应该使用一个文件过滤器。如果
    .svn
    目录正在执行此操作,那么我的程序显然一点也不健壮。谢谢你的回复。我不太明白这个问题。您希望能够过滤目录列表,但不使用
    文件过滤器
    ?@Oli-我觉得SVN的工作方式不应该以这种方式干扰我的程序。但基本上我意识到我应该使用一个文件过滤器。如果
    .svn
    目录正在执行此操作,那么我的程序显然一点也不健壮。谢谢你的回复。