在Java中找不到存在的文件

在Java中找不到存在的文件,java,file,Java,File,我有一个Java程序,可以搜索cookies文件,然后将每个文件保存到一个数组中。然后我尝试在每个文件中搜索某个字符串,但是当我尝试搜索我知道存在的文件时,java告诉我它们不存在。有什么想法吗 以下是我目前的代码: import java.io.*; import java.util.*; public class CheckCookie { static String[] textFiles = new String[100]; sta

我有一个Java程序,可以搜索cookies文件,然后将每个文件保存到一个数组中。然后我尝试在每个文件中搜索某个字符串,但是当我尝试搜索我知道存在的文件时,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.");
      }

   }
在这方面:

String path2 = "pathtocookies"+textFiles[j];
目录名和文件名之间缺少文件分隔符。java.io.File有一个构造函数,它将父路径和文件名作为单独的参数。您可以使用该文件或插入File.separator:

String path2 = "pathtocookies" + File.separator + textFiles[j];
您还将拾取阵列中的目录。在尝试扫描之前,请检查它是否为文件

也可以考虑将文件保存在列表中的其他答案,消除目录。

  files = listOfFiles[i].getName();
试着换成

files = listOfFiles[i].getAbsolutePath();
编辑
您还可以直接启动文件数组(而不是字符串),

您必须使用
.canRead()
方法来验证文件访问。

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

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

您的textFiles数组如下所示:

  • 文本文件[0]:空
  • 文本文件[1]:“itsme.txt”
因此,如果您试图访问“pathtocookies”+“null”,则会失败,您将转到catch并返回函数

进一步提示:

  • 从第一个函数返回列表,将其用作第二个函数的参数
  • 使用调试器或“调试”打印语句调试代码以查看发生了什么
更多提示取决于实际用例


--tb

为什么不将
文件
实例存储在
文件[]
列表


我认为,在执行大量字符串连接安装时,使用StringBuilder也会让您受益匪浅…

在该文件上运行此应用程序的用户有哪些权限?您是否在Windows上并且没有正确转义文件路径?你能告诉我们你的路径实际上是什么样子的吗,因为它显然有问题。你有没有使用过调试器?在测试文件是否存在的地方设置断点?用户应该有管理员权限,我输入了实际路径。我会很快尝试。编辑,这并没有解决问题。同意。这就是我说使用另一个构造函数时的意思。我尝试了这个方法,但仍然收到文件未找到错误。我认为问题不在路径之内,因此我认为这本应该有效,但事实并非如此。我尝试了File.separator,也就是@jalynn2,我现在可以看出,我最初误读了你的答案。因为这也是对解决方案的一个帮助,我对你的答案投了赞成票,但是tb-的答案更正确。当我尝试你的建议时,它导致了以下错误:
线程“main”java.lang中的异常。java.io.File中的NullPointerException。CheckCookie.main(CheckCookie.java:62)中的CheckCookie.searchCookies(CheckCookie.java:37)
@Twisterz,那么ChechCookie的第37行和第62行呢
files = listOfFiles[i].getAbsolutePath();