首页 > 解决方案 > Java Writer 错误:Writer 类型中的方法 write(char[], int, int) 不适用于参数 (int, double, int, String)

问题描述

我正在尝试将我的 Java 程序的输出写入一个文件,但我无法弄清楚我得到的错误。这是我的代码:

import java.io.*;
import java.nio.file.Paths;
import java.util.*;

public class Program10 
{ 
    public static Writer wr;
    public Scanner input;
    static ArrayList<Household> surveyData = new ArrayList<Household>();
    static double avg;
    
    public static void main(String[] args)
    {
        Program10 obj = new Program10(); 
        developerInfo();
        obj.readFile();
        obj.outputRecords(surveyData);
        obj.calculateAverage(surveyData);
        obj.exceedsAverage(surveyData);
        obj.belowAverage(surveyData);
        obj.belowAveragePercent(surveyData);
        //wr.close();
    }
    //**************************************************************
    //
    //  Method:       readFile
    // 
    //  Description:  reads the file and calculates average income
    //
    //  Parameters:   None
    //
    //  Returns:      N/A 
    //
    //**************************************************************
    public void readFile()
    {
        // Open the input file
        try 
        {
            input = new Scanner(Paths.get("Program10.txt"));
            System.out.println("Input file open.");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
        // Open the output file
        try
        {
            **wr = new FileWriter("Program10-output.txt");**
            System.out.println("Output file open.");
        }
        catch(IOException e) 
        {
           System.err.println("Error handling output file. Terminating...");
           System.exit(1);
        }
        
        // Create ArrayList of Household Objects
        while (input.hasNext()) 
        {
            //reading each line of the input file
            int id = input.nextInt();
            double income = input.nextDouble();
            int members = input.nextInt();
            String state = input.nextLine();
            //creating the object by using the constructor
            Household house = new Household(id, income, members, state);
            //storing to Household variable
            surveyData.add(house);
            **wr.write(house.getID(), house.getIncome(), house.getMembers(), house.getState());**
            wr.write("\r\n");
        }
    }
    //***************************************************************
    //
    //  Method:       outputRecords
    // 
    //  Description:  Prints each Household record in four (4) columns
    //
    //  Parameters:   ArrayList<Household> surveyData
    //
    //  Returns:      N/A
    //
    //**************************************************************
    public static void outputRecords(ArrayList<Household> surveyData)
    {
        // Outputting ID, Income, Members & State in four (4) column format
        try
        {
            System.out.printf("%nIdentification\tIncome\t\tMembers\t\tState");
            wr.write("%nIdentification\tIncome\t\tMembers\t\tState");
            
            System.out.println();
            wr.write("\r\n");
            
            for (int i = 0; i < surveyData.size(); i++) 
            {
                Household data = surveyData.get(i);
                System.out.printf("%s%18s%11s%20s\n", data.getID() , data.getIncome() , data.getMembers(), data.getState());
                wr.write("%s%18s%11s%20s\n", data.getID() , data.getIncome() , data.getMembers(), data.getState());
            }
        }
        catch(IOException e) 
        {
            e.printStackTrace();
        }
    }

我的错误是: Writer 类型中的方法 write(String, int, int) 不适用于参数 (String, int, double, int, String)

当我第一次将其定义为write(char[], int, int)时,我不明白它在哪里被定义为: wr = new FileWriter("Program10-output.txt");

如何定义 writer 对象以便将家庭对象以格式(int、double、int、String)写入它?

标签: java

解决方案


您正在尝试使用write您使用的方式printf,但write不能以这种方式使用。它不支持格式字符串。你如何声明并不重要wr。问题不在声明中。Writer只是没有这个功能。

如果要使用格式,一种方法是使用String.format先创建格式化字符串,然后将格式化字符串传递给write.

String formattedString = String.format("%s%18s%11s%20s\n", data.getID() , data.getIncome() , data.getMembers(), data.getState());
wr.write(formattedString);

String.format像 一样工作printf,只是它返回格式化的字符串,而不是将其打印到控制台。

您似乎在其他地方使用过格式字符串。你应该改变那些地方使用String.format的是。


推荐阅读