java - 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)写入它?
解决方案
您正在尝试使用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
的是。
推荐阅读
- c# - 在 Unity3D 项目保存期间检测 [ExecuteAlways] MonoBehavior 是否正在运行
- google-apps-script - 为多个选项卡和多行创建依赖下拉列表
- angular - Angular 9 - 单个 SPA 子路由问题
- python - 减去DataFrame中每一列的前一列的值
- c# - 从视图中右键单击“转到控制器”时,出现错误(“找不到匹配的控制器”)
- python - 根据字符串条件将字符串列表运行到另一列,并将值替换为 pandas 中匹配的字符串
- python-3.x - 为什么 beautifulsoup 没有显示任何结果?
- javascript - 使用 D3 版本 4 的表中的数据加载问题
- java - 不断检查需求的循环
- javascript - 忽略 ReactJS 中表列中的重复条目