Java 如果不存在,则写入文件

Java 如果不存在,则写入文件,java,file,file-io,io,inputstream,Java,File,File Io,Io,Inputstream,我试图创建一个块,当文件不存在时写入文件,但它已变成第22条军规。该文件不存在,因此无法写入该文件以使其存在。以下是我的尝试: if(!FileReadWrite.file2.exists()) FileReadWrite.fileWrite(); public static File file2 = new File("./settings.txt"); public static void fileWrite() { try { File

我试图创建一个块,当文件不存在时写入文件,但它已变成第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
线程“main”java.lang.ExceptionInInitializeError中的异常 位于srcD.Main.(Main.java:19)/(FileReadWrite.fileWrite()) 在srcD.Main.Main(Main.java:129)/(makejframe) 原因:java.lang.NullPointerException 位于srcD.FileReadWrite.(FileReadWrite.java:7)/(公共文件…) ... 还有两个
我认为这个
ClassLoader.getSystemResource(“settings.txt”)
代码返回null,并且
.getFile()
获取一个
NPE


对评论的答复

首先,您应该了解该方法
getSystemResource
不适用于外部资源 要从jar加载外部资源,必须使用资源的完整路径full!=绝对的, 如何找到完整路径

start point + path to resource
例如,我们有下一个文件结构
/Users/fakeuser/tetsproject/
-此文件夹包含您的jar和
conf
文件夹包含或应该包含
settings.txt
,如果您有这样的交付结构,您的代码将是

 public static File file2 = new File("./conf/settings.txt");

仅此而已。

您需要有权限在jar所在的文件夹中创建文件的用户来执行jar。@LuiggiMendoza我有这些权限。第一个块是Main 19,公共静态文件行是FileReadWrite 7。如果没有Stacktrace,很难找到错误。顺便说一句,接得不错。你说得对。但是我该怎么修呢?我知道没有其他方法可以在jar之外加载文件,我必须包含.getFile()。@LuiggiMendoza为什么不呢,它是代码的一部分,没有try{}catch块,并且有很长的初始化结构。@Coupon22看看我答案的第二部分。/解决了我的答案(还有一些校对)。非常感谢。