在Java中找不到存在的文件

时间:2012-10-25 15:02:41

标签: java file

我有一个Java程序,可以搜索您的cookie文件,然后将每个文件保存到一个数组中。然后我尝试在每个文件中搜索某个字符串,但是当我尝试搜索我知道存在的文件时,java告诉我他们没有。有什么想法吗?

到目前为止,这是我的代码:

   import java.io.*;
   import java.util.*;

   public class CheckCookie 
   {
      static String[] textFiles = new String[100];
        static String userName = "";

      public static void findCookies()
      {

         String path = "pathtocookies"; 

         String files;
         File folder = new File(path);
         File[] listOfFiles = folder.listFiles(); 

         for (int i = 0; i < listOfFiles.length; i++) 
         {

            if (listOfFiles[i].isFile()) 
            {
               files = listOfFiles[i].getName();
               if (files.endsWith(".txt") || files.endsWith(".TXT"))
               {
                  textFiles[i] = files;
               }
            }
         }
      }

      public static boolean searchCookies()
      {
         for(int j = 0; j < textFiles.length; j++) {
                String path2 = "pathtocookies"+textFiles[j];
            File file = new File(path2);

            try {
               Scanner scan = new Scanner(file);
               while (scan.hasNext()) {
                  String line = scan.nextLine();
                  if(line.contains("ineligible_age")) { 
                            System.out.println("A cookie for ineligible age was set.");             
                            return true;
                  }
               }

            } 
               catch(FileNotFoundException e) { 
               System.out.println("File was not found.");
                    return false;
               }
         }
            System.out.println("A cookie for ineligible age was not set.");
         return false;
      }

      public static void main(String[] args) 
      {
         findCookies();
            searchCookies();
            System.out.println();
            System.out.println("Finished searching for cookies. Yum.");
      }

   }

实际路径:

C:/Users/lucas.brandt/AppData/Roaming/Microsoft/Windows/Cookies

4 个答案:

答案 0 :(得分:4)

使用List而不是数组来存储textFiles。

想象一个包含2个文件的目录。第一个是“abc.doc”,第二个是“itsme.txt”

您的textFiles数组将如下所示:

  • textFiles [0]:null
  • textFiles [1]:“itsme.txt”

因此,您尝试访问“pathtocookies”+“null”,这将失败,您将转到catch并返回该函数。

进一步提示:

  • 从第一个函数返回列表,将其用作第二个函数的参数
  • 使用调试器或“调试”打印语句调试代码以查看发生的事情

更多提示取决于实际用例。

- TB

答案 1 :(得分:3)

在这一行:

String path2 = "pathtocookies"+textFiles[j];

您缺少目录名称和文件名之间的文件分隔符。 java.io.File有一个构造函数,它将父路径和文件名作为单独的参数。您可以使用它或插入File.separator:

String path2 = "pathtocookies" + File.separator + textFiles[j];

您还在拾取阵列中的目录。在尝试扫描之前检查它是否为文件。

另外,请考虑另一个答案,即将文件保存在List中,从而删除目录。

答案 2 :(得分:0)

  files = listOfFiles[i].getName();

尝试更改为

files = listOfFiles[i].getAbsolutePath();

修改
你也可以直接启动一个File(而不是String)数组,
 并且您必须使用.canRead()方法来验证文件访问权限。

答案 3 :(得分:0)

为什么不将File个实例存储在File[]List<File>

我认为当你做很多字符串连接时,你也会从使用StringBuilder中受益......