繁体   English   中英

Java Writer 错误:Writer 类型中的方法 write(char[], int, int) 不适用于 arguments (int, double, int, String)

[英]Java Writer error: The method write(char[], int, int) in the type Writer is not applicable for the arguments (int, double, int, String)

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

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) 不适用于 arguments (String, int, double, int, String)

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

怎么定义 writer object 以便将家庭 object 格式(int,double,int,String)写入它?

您正在尝试以使用printf的方式使用write ,但不能以这种方式使用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的地方。

FileWriter 上的 write() 方法继承自 OutputStreamWriter。 您可以在此处查看文档。 https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html#write(char[],%20int,%20int)

write() 只有 3 个选项可以将字符串写入文件。 我不确定你写信给家里 object 是什么意思?

也许您可能希望覆盖您的家庭 object 中的 toString 方法,在这种情况下,您可以将其作为字符串写入文件。

您可以使用 String.format() 指定数据格式并将字符串写入写入器。

 import java.io.*;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

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) throws IOException {
        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() throws IOException {
        // 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);
            String formattedString = String.format("%s%18s%11s%20s\n", house.getId(), house.getIncome(),
                    house.getMembers(), house.getState());
            wr.write(formattedString);
            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(String.format("%s%18s%11s%20s\n", data.getId() , data.getIncome(), data.getMembers(),
                        data.getState()));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM