在Java中找不到存在的文件
我有一个Java程序,可以搜索cookies文件,然后将每个文件保存到一个数组中。然后我尝试在每个文件中搜索某个字符串,但是当我尝试搜索我知道存在的文件时,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
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”
- 从第一个函数返回列表,将其用作第二个函数的参数
- 使用调试器或“调试”打印语句调试代码以查看发生了什么
--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();