java - Java写入文件不起作用,路径生成错误?(阅读作品)
问题描述
我正在做一个学校项目,我需要使用 txt 文件初始化程序的状态。我从来没有真正使用过读取文件,所以我使用这里的教程 来生成项目使用的资源文件夹的路径名。
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("savedState.txt").toURI());
BufferedReader br = new BufferedReader(new FileReader(file));
这很好用!当我尝试写回文件时,麻烦就来了。我尝试过使用类似的方法,但它似乎不起作用。当我使用此代码时,该文件仍然为空。
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("savedState.txt").toURI());
//File file = new File("/actual file path/savedState.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
最糟糕的是,当我使用实际文件路径(第三行而不是前两行)时,它可以正常工作。我不知道如何使它工作!
我想我还应该添加正在编写的内容(也许我做错了)。这就是它正在做的事情
for (int i=0;i<tokens.size();i++)
bw.write(tokens.get(i)+',');
bw.close();
tokens 是一个 ArrayList,类型为 String
解决方案
如果要写入文件,则第三行(有效的行)应该是最正确的行。例如,如果文件在您的 .jar 文件或 .war 文件中,您将能够使用 Classloader 读取它,但不能写入它。
建议:像这样调用你的程序:
java -Dfilepath=/path/to/file -jar yourjar.jar
然后在您的代码中:
File file = new File(System.getProperty("filepath"));
推荐阅读
- javascript - 在Javascript中将日期历史转换为日期范围
- linux - 我在哪里可以获得更多 qtcreator 的小部件?
- javafx - 问题创建按钮,其中打开一个窗口/阶段
- reactjs - 在 redux 状态下通过 key-index 移除对象
- angular - Angular Firebase 更新代码未在快照 foreach 中执行
- url - 通过添加 url 参数更改 facelets 模板中的内容布局
- r - 无法在闪亮的仪表板中可视化输出
- sql - 在 where 子句中使用别名结果
- jquery - 计算 div 中的文本行数
- css - 不能让 div 项目占据它的全部长度