2

我有一个 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

4 回答 4

4

使用列表而不是数组来存储文本文件。

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

您的 textFiles 数组将如下所示:

  • 文本文件 [0]:空
  • 文本文件[1]:“itsme.txt”

所以你尝试访问“pathtocookies”+“null”,这将失败,你去catch并从函数中返回。

进一步提示:

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

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

--待定

于 2012-10-25T15:26:19.970 回答
3

在这一行:

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

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

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

您还可以在阵列中获取目录。在尝试扫描它之前检查它是否是一个文件。

另外,请考虑将文件保存在列表中的其他答案,从而消除目录。

于 2012-10-25T15:13:26.103 回答
0
  files = listOfFiles[i].getName();

尝试更改为

files = listOfFiles[i].getAbsolutePath();

编辑
您也可以直接启动一个文件数组(而不是字符串),
并且您必须使用.canRead()方法来验证文件访问。

于 2012-10-25T15:19:46.610 回答
0

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

我认为在进行大量字符串连接时,您也会从使用 StringBuilder 中受益……

于 2012-10-25T15:37:30.077 回答