【问题标题】:Write file if not existing如果不存在则写入文件
【发布时间】:2012-09-30 18:45:37
【问题描述】:

我正在尝试创建一个在文件不存在时写入文件的块,但它已变成 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

【问题讨论】:

  • 您需要使用有权在 jar 所在文件夹中创建文件的用户执行 jar。
  • @LuiggiMendoza 我有这些特权。
  • 第一个块是Main 19,公共静态文件行是FileReadWrite 7。

标签: java file file-io io inputstream


【解决方案1】:

我认为这个 ClassLoader.getSystemResource("settings.txt") 代码返回 null 并且 .getFile() 得到一个 NPE


回复评论

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

start point + path to resource

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

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

仅此而已。

【讨论】:

  • 没有 Stacktrace 就很难找到错误。顺便说一句,不错的收获。
  • 你是对的。我该如何解决它?我知道没有其他方法可以在 jar 之外加载文件,我必须包含 .getFile()。
  • @LuiggiMendoza 为什么不呢,它是没有 try{}catch 块和长初始化结构的代码的一部分。
  • @Coupon22 看我回答的第二部分。
  • ./ 解决了我的答案(以及一些校对)。谢谢!
猜你喜欢
  • 2013-12-24
  • 1970-01-01
  • 2011-10-19
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2021-07-05
相关资源
最近更新 更多