首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件写入- PrintStream附加

文件写入- PrintStream附加
EN

Stack Overflow用户
提问于 2011-11-08 06:12:04
回答 2查看 63K关注 0票数 18

我试图将一些信息附加到一个文本文件中,但该文件只显示了写入的最后一个元素。

有许多Engineer,但它只将读取的最后一个元素打印到文件中。

例如:

代码语言:javascript
复制
Engineer e = new Engineer(firstName,surName,weeklySal);
PrintStream writetoEngineer = new PrintStream(new File ("Engineer.txt"));

//This is not append. Only print. Overwrites the file on each item.
writetoEngineer.append(e.toString() + " "  + e.calculateMontly(weeklySal));
EN

回答 2

Stack Overflow用户

发布于 2011-11-08 06:17:10

我不知道您要在哪里关闭文件。我也没看到你在读什么。

我假设您想要追加到文件中,而不是每次都覆盖它。在这种情况下,您需要使用FileOutputStream的append选项,因为这不是默认行为。

代码语言:javascript
复制
PrintStream writetoEngineer = new PrintStream(
     new FileOutputStream("Engineer.txt", true)); 

顺便说一句:e.toString() + " "e + " "几乎相同,只是如果e为空,它不会抛出异常。

票数 47
EN

Stack Overflow用户

发布于 2011-11-08 06:50:22

由于给定代码片段的代码不是一个自包含的可编译示例(尽管它很简单),因此我可以猜测PrintStream是在循环中创建的,每次迭代都会遍历Engineer集合。这将导致文件被截断,如PrintStream的构造函数javadoc所示:

参数:

file -用作此打印流目标的文件。如果该文件存在,则它将被截断为零大小;否则,将创建一个新文件。输出将写入文件并进行缓冲。

尝试以下示例代码:

代码语言:javascript
复制
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;


public class PrintEngineers {

    public static class Engineer {
    
        private final String firstName;
        private final String surName;
        private final int weeklySal;
    
        public Engineer(String firstName, String surName, int weeklySal) {
            super();
            this.firstName = firstName;
            this.surName = surName;
            this.weeklySal = weeklySal;
        }

        public int calculateMonthly() {
            return weeklySal * 4; // approximately
        }
    
        @Override
        public String toString() {
            return firstName + " " + surName;
        }
    }

    /**
     * @param args
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException {
    
        Engineer e1 = new Engineer("first1", "sur1", 100);
        Engineer e2 = new Engineer("first2", "sur2", 200);
        Engineer e3 = new Engineer("first3", "sur3", 300);

        List<Engineer> engineers = new ArrayList<>(3);
        engineers.add(e1);
        engineers.add(e2);
        engineers.add(e3);

        // instanciate PrintStream here, before the loop starts
        PrintStream writetoEngineer = new PrintStream(new File("Engineer.txt"));
        for (Engineer engineer : engineers) {
            // new PrintStream(...) here truncates the file (see javadoc)               //This is not append.Only print.Refresh file on each item 
            writetoEngineer.append(engineer.toString()).append(' ')
                        .append("" + engineer.calculateMonthly()).append('\n'); 
        
        }
    }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8043356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档