【发布时间】:2017-09-25 00:07:03
【问题描述】:
我正在尝试使用 Google Drive Java 快速入门,但在尝试使用 InputStream 时遇到了 NullPointerException。
Google 的快速入门代码
InputStream in =
Quickstart.class.getResourceAsStream("client_secret.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
根据一个 SO question,getResourceAsStream 在与调用它的类相同的目录中查找文件,因此我将 client_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)
当我在资源管理器中使用路径时,我可以找到这些文件。
我尝试了不同的方法来打开文件(绝对路径、相对路径、使用“父”构造函数……),但结果总是相同。不过,当我在在线 Java 编译器上执行此代码时(如 tutorialspoint 的编译器),此代码有效。
我的操作系统是 Windows 10,我正在使用 Eclipse IDE。
【问题讨论】:
-
A:\Documents? -
重复解释
"/client_secret.json"和"client_secret.json"的区别 -
这里去掉斜线:
Quickstart.class.getResourceAsStream("client_secret.json"); -
@Jens 我在不同的地方复制了我的文件(A:\Documents,带有 Quickstart.java 等)
-
A 是什么驱动器?通常我知道它是软盘驱动器(很久以前)