这两种创建文件的方式是一样的吗?

时间:2012-01-10 09:01:12

标签: java file

我正在用Java编写一个程序来搜索一段文本

我把这3个作为输入

  1. 目录,从中开始搜索
  2. 要搜索的文字
  3. 搜索必须是递归的(是否包含目录中的目录)
  4. 这是我的代码

    public void theRealSearch(String dirToSearch, String txtToSearch, boolean isRecursive) throws Exception
    {
        File file = new File(dirToSearch);
        String[] fileNames = file.list();
        for(int j=0; j<fileNames.length; j++)
        {
            File anotherFile = new File(fileNames[j]);
            if(anotherFile.isDirectory())
            {
                if(isRecursive)
                    theRealSearch(anotherFile.getAbsolutePath(), txtToSearch, isRecursive);
            }       
            else
            {
                BufferedReader bufReader = new BufferedReader(new FileReader(anotherFile));
                String line = "";
                int lineCount = 0;
                while((line = bufReader.readLine()) != null)
                {
                    lineCount++;
                    if(line.toLowerCase().contains(txtToSearch.toLowerCase()))
                        System.out.println("File found. " + anotherFile.getAbsolutePath() + " at line number " + lineCount);
                }
            }   
        } 
    }
    

    当递归设置为true时,程序返回FILENOTFOUNDEXCEPTION

    所以,我提到了我想要实现这个程序的网站并编辑了我的程序。这是怎么回事

    public void theRealSearch(String dirToSearch, String txtToSearch, boolean isRecursive) throws Exception
    {
        File[] files = new File(dirToSearch).listFiles();
        for(int j=0; j<files.length; j++)
        {
            File anotherFile = files[j];
            if(anotherFile.isDirectory())
            {
                if(isRecursive)
                    theRealSearch(anotherFile.getAbsolutePath(), txtToSearch, isRecursive);
            }       
            else
            {
                BufferedReader bufReader = new BufferedReader(new FileReader(anotherFile));
                String line = "";
                int lineCount = 0;
                while((line = bufReader.readLine()) != null)
                {
                    lineCount++;
                    if(line.toLowerCase().contains(txtToSearch.toLowerCase()))
                        System.out.println("File found. " + anotherFile.getAbsolutePath() + " at line number " + lineCount);
                }
            }   
        } 
    }
    

    然后完美的工作。两个片段之间的唯一区别是创建文件的方式,但它们对我来说看起来一样!!

    有人能指出我搞砸的地方吗?

3 个答案:

答案 0 :(得分:1)

在第二个例子中,它使用listFiles()来返回文件。在你的例子中,它使用list(),它只返回文件的名称 - 这里是错误。

答案 1 :(得分:1)

第一个例子中的问题在于file.list()返回文件名数组,而不是路径。如果要修复它,只需在创建文件时将file作为参数传递,以便将其用作父文件:

File anotherFile = new File(file, fileNames[j]);

现在它假定anotherFile位于file所代表的目录中,这应该有效。

答案 2 :(得分:-1)

在构建File对象时,需要包含基目录,因为@fivedigit指出。

File dir = new File(dirToSearch);
for(String fileName : file.list()) {
    File anotherDirAndFile = new File(dir, fileName);

完成后我会关闭你的文件,我会避免使用throws Exception