【问题标题】:I need help getting program to output text file in a specific format.我需要帮助让程序以特定格式输出文本文件。
【发布时间】:2015-05-28 00:57:33
【问题描述】:

这是我到目前为止的程序。它需要以特定格式输出到文本文件,但我遇到问题请帮忙。它没有向测试文件输出任何内容。

import java.util.*;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

public class InputStream 
{ 
public static void main(String[] args){
FileInputStream filestream;
BufferedReader reader;
FileOutputStream output;
PrintWriter writer;
String firstline;
String body = "";
String line;

try{
filestream = new FileInputStream("salary.txt");
reader = new BufferedReader(new InputStreamReader(filestream));
output = new FileOutputStream("test.txt");
PrintWriter writer1 = new PrintWriter("test.txt");
firstline = reader.readLine();




 String result = firstline + body;
 writer1.write(result);
 reader.close();
 reader = null;
 filestream = null;

   }
      catch(IOException e)
     {
     System.out.println(e);

  }

 } 

}

我无法让它正确输出,但它应该是这样的。

Example Input   file
Ralph Kramden associate 70817.75
Jon T. Doe assistant 79174.73
Ed Norton associate 69619.0
Tom Foolery full 116992.43


Sample  Output  file
Doe, Jon T. assistant 79174.73
-------
Total Salary: $79174.73
Average Salary: $79174.73
Kramden, Ralph associate 70817.75
Norton, Ed associate 69619.0
 -------
 Total Salary: $140436.75
 Average Salary: $79174.73

【问题讨论】:

  • 您必须逐行读取文件(例如,使用 while 循环)。在你的代码中你只得到第一行?
  • while ((line = reader.readLine()) != null) { body = line;字符串结果 = 第一行 + 正文; writer1.write(结果);这是我的 while 循环,我不太确定如何处理它

标签: java eclipse io bluej


【解决方案1】:

首先,当您处理文件时,请务必在写入文件后关闭以保存。 您关闭了“阅读器”,但没有关闭“作者”。

这是一个输出你需要的例子:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class InputStream {

private static final String ASSISTANT = "assistant";
private static final String ASSOCIATE = "associate";
private static final String FULL = "full";

public static void main(String[] args) {
    FileInputStream filestream;
    BufferedReader reader;
    PrintWriter writer;
    String line;

    double totalAssistant = 0;
    double totalAssociate = 0;
    double totalFull = 0;

    try {
        filestream = new FileInputStream("salary.txt");
        reader = new BufferedReader(new InputStreamReader(filestream));
        writer = new PrintWriter("test.txt");

        List<String> assistantList = new ArrayList<String>();
        List<String> associateList = new ArrayList<String>();
        List<String> fullList = new ArrayList<String>();

        while ((line = reader.readLine()) != null) {

            String[] split = line.split(" ");

            // Value
            double value = Double.parseDouble(split[split.length - 1]);

            // Type
            String type = split[split.length - 2];

            if (ASSISTANT.equals(type)) {
                totalAssistant += value;
                assistantList.add(line);

            } else if (ASSOCIATE.equals(type)) {
                totalAssociate += value;
                associateList.add(line);

            } else if (FULL.equals(type)) {
                totalFull += value;
                fullList.add(line);
            }
        }

        writeInFileOutput(writer, totalAssistant, assistantList);
        writeInFileOutput(writer, totalAssociate, associateList);
        writeInFileOutput(writer, totalFull, fullList);

        reader.close();

        writer.close();
    } catch (IOException e) {
        System.out.println(e);

    } finally {
        reader = null;
        filestream = null;
        writer = null;
    }

}

private static void writeInFileOutput(PrintWriter writer, double total,
        List<String> listLines) {
    for (String assistant : listLines) {
        writer.append(assistant).append("\n");
    }

    writer.append("-------\n");
    writer.append("Total Salary: $").append(String.valueOf(total)).append("\n");
    writer.append("Average Salary: $")
            .append(String.valueOf(total / listLines.size())).append(" \n\n");
}

}

输出:

Jon T. Doe assistant 79174.73
-------
Total Salary: $79174.73
Average Salary: $79174.73 

Ralph Kramden associate 70817.75
Ed Norton associate 69619.0
-------
Total Salary: $257429.18
Average Salary: $128714.59 

Tom Foolery full 116992.43
-------
Total Salary: $116992.43
Average Salary: $116992.43 

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 2020-02-15
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多