我正在尝试创建一个在文件不存在时写入文件的块,但它已变成Catch-22。该文件不存在,因此无法写入文件以便它可以存在。这是我的尝试:
if(!FileReadWrite.file2.exists())
FileReadWrite.fileWrite();
public static File file2 = new File("./settings.txt");
public static void fileWrite()
{
try
{
FileWriter fstream = new FileWriter(file2);
BufferedWriter out = new BufferedWriter(fstream);
String c = Byte.toString(Textures.a);
out.write(c);
out.close();
}catch (Exception e)
{
System.err.println("Error: " + e.getMessage());
}
int ch;
StringBuffer strContent = new StringBuffer("");
InputStream fin = null;
try
{
fin = new FileInputStream(file2);
while ((ch = fin.read()) != -1)
{
strContent.append((char) ch);
}
fin.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
我正在使用Eclipse。该文件位于bin文件夹中,但当我将其导出到jar时,它位于jar文件夹之外。
Exception in thread "main" java.lang.ExceptionInInitializerError
at srcD.Main.<init>(Main.java:19) //(FileReadWrite.fileWrite())
at srcD.Main.main(Main.java:129) //(Make JFrame)
Caused by: java.lang.NullPointerException
at srcD.FileReadWrite.<clinit>(FileReadWrite.java:7) //(public file...)
... 2 more
答案 0 :(得分:2)
我认为此ClassLoader.getSystemResource("settings.txt")
代码返回null,.getFile()
获得NPE
回答评论
首先,您应该了解该方法getSystemResource
不适用于外部资源read this
对于从jar加载外部资源,你必须使用资源的完整路径,full!= absolute,
如何找到完整路径
start point + path to resource
例如,我们有下一个文件结构/Users/fakeuser/tetsproject/
- 此文件夹包含您的jar和conf
文件夹包含或应包含settings.txt
,如果您有这样的交付结构,您的代码将< / p>
public static File file2 = new File("./conf/settings.txt");
就是这样。