当前位置: 首页 > 知识库问答 >
问题:

为什么我尝试将文本附加到文件时没有响应?

华展鹏
2023-03-14

我只是想给我的*添加一行新的文本。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();

我错过了什么?为什么没有错误信息,没有任何回应或反馈?

下面的一切只是关于我所尝试的额外信息。在任何情况下都没有反馈:

  • 不是这个:为什么BufferedWriter不写入文件

另外,这段代码,从这个答案中,什么也做不了...

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%确认正确的文件。

共有3个答案

赏弘
2023-03-14

我已经尝试过这段代码,它与你的代码非常相似,而且运行良好,所以我认为问题在于你选择文件路径的方式。

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();
    }   
}
商经业
2023-03-14

由于我不能评论,你可能不会将文件保存回它来自的归档(我不确定java是否支持通过编辑包含的文件写入归档的内部结构,但是你可能想尝试将文件存储在外部到存档,看看这是否是问题的来源)。

您在评论中发布内容的原因是您的IDE不会从编译的程序中提取资源文件,如果您想同步内部数据,您可以使用套接字设置客户机-服务器连接,并创建一个程序,将发送到web应用的数据包中的数据写入本地文件,否则,从托管位置检索编辑过的文件可能不那么复杂(或者,如果从同一台PC上部署,则可以通过符号链接或硬链接逃脱)

戚令秋
2023-03-14

为了以追加模式打开文件,您应该使用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的核心功能,而是存储带有随附元数据的二进制数据的约定。您应该能够以通常的方式修改集合中的任何文档,同时保持相应文档的完整性。主要