Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Java中打开现有文件_Java_File - Fatal编程技术网

Can';t在Java中打开现有文件

Can';t在Java中打开现有文件,java,file,Java,File,我试图让GoogleDrive Java快速启动工作,但在尝试使用InputStream时,我遇到了NullPointerException 谷歌的快速启动代码 根据一个SO问题,getResourceAsStream在调用该文件的类所在的目录中查找该文件,因此我将我的客户机_secret.json与我的类放在一起: |src/main/java |---quickstart |------Quickstart.java |------client_secret.json 我仍然存在NullP

我试图让GoogleDrive Java快速启动工作,但在尝试使用InputStream时,我遇到了NullPointerException

谷歌的快速启动代码 根据一个SO问题,getResourceAsStream在调用该文件的类所在的目录中查找该文件,因此我将我的客户机_secret.json与我的类放在一起:

|src/main/java
|---quickstart
|------Quickstart.java
|------client_secret.json
我仍然存在NullPointerException,因此我尝试从文件创建InputStream,而不是使用getResourceAsStream:

java.io.File initialFile = new java.io.File("A:/Documents/client_secret.json");
//   java.io.File initialFile = new java.io.File("client_secret.json");
if (initialFile.canRead()) {
    System.out.println("it works!");
} else {
    System.out.println("that's a fail");
}
System.out.println(initialFile.getAbsolutePath() + " " + initialFile.exists() + " " + initialFile.getAbsoluteFile().exists());
InputStream in = new FileInputStream(initialFile);
其结果是:

that's a fail
A:\Documents\client_secret.json false false
Exception in thread "main" java.io.FileNotFoundException: A:\Documents\client_secret.json (Le fichier spécifié est introuvable)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at quickstart.Quickstart.authorize(Quickstart.java:76)
    at quickstart.Quickstart.getDriveService(Quickstart.java:102)
    at quickstart.Quickstart.main(Quickstart.java:111)
这是个失败
A:\Documents\client\u secret.json false false
线程“main”java.io.FileNotFoundException中的异常:A:\Documents\client\u secret.json(Le fichier spécifiéest introvable)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:138)
在quickstart.quickstart.authorize(quickstart.java:76)
在quickstart.quickstart.getDriveService(quickstart.java:102)
位于quickstart.quickstart.main(quickstart.java:111)
使用资源管理器中的路径时,我可以找到这些文件

我尝试了不同的方法打开文件(绝对路径、相对路径、使用“父”构造函数等等),但结果总是一样的。但是,当我在在线java编译器上执行它时(就像TutorialPoint的一样),这段代码就可以工作了


我的操作系统是Windows 10,我正在使用Eclipse IDE。

这是完整的解释

在Class.getResourceAsStream(path)中,该路径被解释为从中调用它的类的包的本地路径。例如,调用String.getResourceAsStream(“myfile.txt”)将在类路径中的以下位置查找文件:“java/lang/myfile.txt”。如果您的路径以/开头,那么它将被视为绝对路径,并将从类路径的根开始搜索。因此,调用String.getResourceAsStream(“/myfile.txt”)将查看类路径中的以下位置。/myfile.txt

您的路径定义为绝对路径,绝对到类路径的根

Quickstart.class.getResourceAsStream("client_secret.json"); // remove the "/"

例子 这将是基于路径的输出

InputStream in = Main.class.getResourceAsStream("Test.log"); //   /labo/Test.log
// > Hello from Labo
InputStream in = Main.class.getResourceAsStream("/Test.log"); //  /Test.log
// > Hello from Source Package
代码:

public class Main {
    public static void main(String[] args ) throws Exception{
        String[] paths = {"/Test.log", "Test.log"};
        for(String path : paths)
            readPath(path);
    }

    static void readPath(String path) throws Exception{
        InputStream in = Main.class.getResourceAsStream(path);
        InputStreamReader reader = new InputStreamReader(in);
        int i = -1;
        System.out.println(path + " : ");
        while((i = reader.read()) > -1){
            System.out.print((char)i);
       public }
        System.out.println();
    }
}
输出:

/Test.log : 
Hello from the Source Package
Test.log : 
Hello from Labo

A:\Documents
?副本解释了
“/client\u secret.json”
“client\u secret.json”
删除此处的斜杠:
Quickstart.class.getResourceAsStream(“client\u secret.json”)
@Jens我在不同的地方复制了我的文件(A:\Documents,with Quickstart.java等)什么是驱动器?通常我知道它是软盘驱动器(很久以前),正如我在评论中所说,斜杠是一个复制/粘贴错误(从实际的quickstart复制,但在我的代码中已经删除)。我编辑了原稿post@Carm提供一个例子来重现这一点。我确实创建了我的示例来确认这一点,它正在工作。这是完整的例子好吧,我想我的问题一定来自其他地方,因为我不能让你的例子工作(NullPointerException)…@Carrm那么
inputstream
是空的?如果找不到具有此名称的资源,则为InputStream对象或null。请清理项目并重试。我没有看到解决方案是的,看起来它是空的
public class Main {
    public static void main(String[] args ) throws Exception{
        String[] paths = {"/Test.log", "Test.log"};
        for(String path : paths)
            readPath(path);
    }

    static void readPath(String path) throws Exception{
        InputStream in = Main.class.getResourceAsStream(path);
        InputStreamReader reader = new InputStreamReader(in);
        int i = -1;
        System.out.println(path + " : ");
        while((i = reader.read()) > -1){
            System.out.print((char)i);
       public }
        System.out.println();
    }
}
/Test.log : 
Hello from the Source Package
Test.log : 
Hello from Labo