我只是想给我的*添加一行新的文本。txt文件,但什么也没发生。文件里装着一本书。war,所以我使用类加载器来访问文件。此外,我的EclipseIDE和文件内容都使用UTF-8编码。
我用这些来获得灵感:
如何在Java中向现有文件添加新的文本行?
带有utf-8的Java BufferedWriter对象
现在我的代码主要基于上一篇文章,如下所示:
public class test {
public static void main(String[] args){
URL url = Thread.currentThread().getContextClassLoader().getResource("MilestoneExport.txt");
File file = new File(url.getFile());
System.out.println(file.canRead()); //true
System.out.println(file.canWrite()); //true
try {
BufferedWriter out = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
out.append("new line");
out.append("new line 2");
out.append("new line 3");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我已经确认文件确实找到了,而且读起来很好。我已经能够通过使用BufferedReader
将它的全部内容输出到控制台。文件的路径也正确,但绝对不会向文件中添加任何文本。我确保每次运行该程序时都进行了刷新和更新。
此外,我尝试创建一个名为foo.txt
的简单空文件,它位于与test.java.相同的目录中,我将以下代码添加到主方法中,由BufferedWriter
提供API,在http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html
PrintWriter out2 = new PrintWriter(
new BufferedWriter(new FileWriter("foo.txt")));
out2.println("new Line");
out2.close();
我错过了什么?为什么没有错误信息,没有任何回应或反馈?
下面的一切只是关于我所尝试的额外信息。在任何情况下都没有反馈:
另外,这段代码,从这个答案中,什么也做不了...
try {
BufferedWriter output = new BufferedWriter(new FileWriter(new File("house.txt")));
output.write("text");
output.close();
}
catch (IOException e) {
e.printStackTrace();
}
最后但并非最不重要的是,我怀疑它可能与我的Web-App的包装有关,以及源文件夹和目标文件夹之间的差异。所以我把代码复制到一个全新的干净项目中,但它仍然什么也做不了...
编辑:
此代码:
System.out.println(file.exists());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
System.out.println(file.getName());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.setLastModified(new GregorianCalendar().getTimeInMillis()));
给出以下输出:
我是否完全误解了java文件对象的使用,以及它与FileWriters的使用?该文件显然是100%确认正确的文件。
我已经尝试过这段代码,它与你的代码非常相似,而且运行良好,所以我认为问题在于你选择文件路径的方式。
public static void main(String[] args){
File file = new File("./localtest.txt");
System.out.println(file.canRead()); //true
System.out.println(file.canWrite()); //true
try {
BufferedWriter out = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
out.append("new line");
out.append("new line 2");
out.append("new line 3");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
由于我不能评论,你可能不会将文件保存回它来自的归档(我不确定java是否支持通过编辑包含的文件写入归档的内部结构,但是你可能想尝试将文件存储在外部到存档,看看这是否是问题的来源)。
您在评论中发布内容的原因是您的IDE不会从编译的程序中提取资源文件,如果您想同步内部数据,您可以使用套接字设置客户机-服务器连接,并创建一个程序,将发送到web应用的数据包中的数据写入本地文件,否则,从托管位置检索编辑过的文件可能不那么复杂(或者,如果从同一台PC上部署,则可以通过符号链接或硬链接逃脱)
为了以追加模式打开文件,您应该使用FileOutputStream
的另一个构造函数:
FileOutputStream(文件文件,布尔追加)
即,
new FileOutputStream(file, true)
问题内容: 在Linux中将文本附加到文件的最简单方法是什么? 我看了这个问题,但是可接受的答案使用了一个附加程序(),我相信应该有一个更简单的方法或类似方法。 问题答案: cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn’t
问题内容: 我正在尝试从文本文件读取文本。有一些特殊的字符,如å,ä和ö。当我制作一个字符串并打印出该字符串时,我得到了?从这些特殊字符。我正在使用以下代码: 谁能告诉我是什么问题。我希望strLine以文本文件形式显示和保存å,ä和ö。提前致谢。 问题答案: 问题可能不在于文件,而在于您尝试打印的控制台。我建议您按照以下步骤 确保您正在读取的文件以UTF-8编码。 确保要打印的控制台具有正确
此angularJS文件不将表达式的值显示为“全名:John Doe”;相反,它显示“全名:{{firstName”“lastName}”。我可能错过了什么? AngularJS文件结束 下面是它的外部javaScript文件:personController。js
我有一个程序,它总是将相同的文件附加到GMAIL(撰写 它所做的是: 在Android 6.0之前,它一直工作良好。现在,我在尝试使用它时收到以下错误: 无法附加空文件 Astro文件共享给我同样的错误(可能是旧版本)。 但是,我安装了ES File Explorer,当我执行相同的例程并选择该文件时,我会收到一个对话框,其中显示: 将文件作为 普通Android方式(适用于彩信、Gmail等)
< li >我创建了一个扩展名无效的文件(。jjs)从我的粘性键盘。 < li >我删除了这个文件 < li >我的所有文件的所有图标都变成文本图标。我丢失了我的颜色主题,没有变量被突出显示,一切都像一个纯文本文件。 我该怎么解决这个问题?我在帮助文档中找不到任何东西 我目前正在运行IntelliJ 2017.3.2
问题内容: 如我所见,java mongo驱动程序不提供从现有gridFS文件获取的功能 我必须直接创建或使用方法。 是否缺少Java驱动程序或gridfs的限制? 除了创建新文件/删除旧文件之外,您能否建议其他解决方法? 谢谢 问题答案: GridFS不是MongoDB的核心功能,而是存储带有随附元数据的二进制数据的约定。您应该能够以通常的方式修改集合中的任何文档,同时保持相应文档的完整性。主要