public static void read() throws NumberFormatException, IOException //读取文件中的信息 { BufferedReader bufferedreader = new BufferedReader(new FileReader(FILE_NAME)); //创建一个字符流缓冲对象 String line; while ((line = bufferedreader.readLine()) != null) { String[] parts = line.split(","); //将line通过“ ,”分割字符串数组 String Gname = parts[0]; int Gage = Integer.parseInt(parts[1]); int Gphonenumber=Integer.parseInt(parts[2]); String Gsex = parts[3]; String Gadr = parts[4]; String Gsize = parts[5]; //按照顺序,将数组中的读取出来 Guke guke = new Guke(Gname, Gage, Gphonenumber, Gsex, Gadr, Gsize); //将读取出来的通过Guke的构造方法创建类 customerList.add(guke); //将Guke类存进Arraylist中 customerNames.add(Gname); // 将名字存进另一个Arraylist中 } } 使用这个从文件中读取信息,为什么会抛出异常Index 4 out of bounds for length 0
时间: 2024-02-07 12:03:47 浏览: 57
该异常 "Index 4 out of bounds for length 0" 表示你尝试访问一个长度为零的数组中的第五个元素,即 `parts[4]`,这通常是因为你尝试解析的某一行数据没有足够的逗号分隔符来分割成六个部分,导致数组 `parts` 的长度不足 6。
你需要检查文件中的每一行数据,确保每个数据都能按逗号分隔成六部分。如果有任何数据不符合你的格式,你需要进行适当的处理,例如跳过该行或使用默认值来代替缺失的数据。
相关问题
用Java编写解析一个文本文件中的价格数据,并计算平均价格,该文件的内容如下:
好的,以下是一个Java程序示例,可以实现解析文本文件中的价格数据,并计算平均价格:
```
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class PriceParser {
public static void main(String[] args) throws IOException {
String filePath = "path/to/price_file.txt"; // 替换成实际的文件路径
double sum = 0;
int count = 0;
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
try {
double price = Double.parseDouble(line.trim());
sum += price;
count++;
} catch (NumberFormatException e) {
// 忽略非数字的行
}
}
}
if (count > 0) {
double average = sum / count;
System.out.println("平均价格为:" + average);
} else {
System.out.println("没有找到任何价格数据");
}
}
}
```
该程序首先定义了一个文件路径变量 `filePath`,然后使用 `BufferedReader` 类从文件中逐行读取数据,并尝试将每行数据解析为 double 类型的价格数据。如果解析成功,就将该价格加入到总价 `sum` 中,并增加计数器 `count` 的值。如果解析失败,则忽略该行数据。最后,如果找到了至少一个有效的价格数据,则计算平均价格并输出结果;否则输出找不到价格数据的提示。
用Java写一个成绩管理系统,有图形化界面,能实现文件输入输出流
以下是一个简单的成绩管理系统的Java代码,使用了Swing实现图形化界面,并且能够使用文件输入输出流进行数据的读写操作。
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class ScoreManagementSystem extends JFrame {
private JLabel nameLabel, scoreLabel;
private JTextField nameField, scoreField;
private JButton addButton, showButton, saveButton, loadButton;
private JTextArea infoArea;
public ScoreManagementSystem() {
super("成绩管理系统");
// 创建组件
nameLabel = new JLabel("姓名:");
scoreLabel = new JLabel("成绩:");
nameField = new JTextField(10);
scoreField = new JTextField(10);
addButton = new JButton("添加");
showButton = new JButton("显示");
saveButton = new JButton("保存");
loadButton = new JButton("读取");
infoArea = new JTextArea(10, 30);
// 添加组件
JPanel panel1 = new JPanel();
panel1.add(nameLabel);
panel1.add(nameField);
panel1.add(scoreLabel);
panel1.add(scoreField);
panel1.add(addButton);
panel1.add(showButton);
panel1.add(saveButton);
panel1.add(loadButton);
add(panel1, BorderLayout.NORTH);
add(infoArea, BorderLayout.CENTER);
// 绑定事件
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = nameField.getText();
String scoreStr = scoreField.getText();
if (name.length() == 0 || scoreStr.length() == 0) {
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "请输入姓名和成绩", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
try {
double score = Double.parseDouble(scoreStr);
addScore(name, score);
infoArea.setText(getAllScores());
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "请输入正确的成绩", "错误", JOptionPane.ERROR_MESSAGE);
}
}
});
showButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
infoArea.setText(getAllScores());
}
});
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileNameExtensionFilter("文本文件", "txt"));
int result = fc.showSaveDialog(ScoreManagementSystem.this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
saveScores(file);
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "保存成功", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException ex) {
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "保存失败:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
});
loadButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new FileNameExtensionFilter("文本文件", "txt"));
int result = fc.showOpenDialog(ScoreManagementSystem.this);
if (result == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
loadScores(file);
infoArea.setText(getAllScores());
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "读取成功", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException ex) {
JOptionPane.showMessageDialog(ScoreManagementSystem.this, "读取失败:" + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
});
// 设置窗口属性
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
// 添加一条成绩
private void addScore(String name, double score) {
try {
FileWriter fw = new FileWriter("scores.txt", true);
fw.write(name + " " + score + "\n");
fw.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "写入文件失败:" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
// 获取所有成绩
private String getAllScores() {
StringBuilder sb = new StringBuilder();
try {
FileReader fr = new FileReader("scores.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
fr.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "读取文件失败:" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
return sb.toString();
}
// 保存成绩到文件
private void saveScores(File file) throws IOException {
FileWriter fw = new FileWriter(file);
FileReader fr = new FileReader("scores.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
fw.write(line + "\n");
}
br.close();
fr.close();
fw.close();
}
// 从文件读取成绩
private void loadScores(File file) throws IOException {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
FileWriter fw = new FileWriter("scores.txt");
while ((line = br.readLine()) != null) {
fw.write(line + "\n");
}
br.close();
fr.close();
fw.close();
}
public static void main(String[] args) {
new ScoreManagementSystem();
}
}
```
这个成绩管理系统的界面包括姓名、成绩两个输入框,以及添加、显示、保存、读取四个按钮。当用户点击添加按钮时,程序将读取输入框中的姓名和成绩,然后将它们写入到一个文件中。当用户点击显示按钮时,程序将读取文件中的所有成绩,并将它们显示在界面的文本区域中。当用户点击保存按钮时,程序将弹出一个文件选择对话框,用户可以选择一个文件,然后程序将把当前所有成绩写入到该文件中。当用户点击读取按钮时,程序将弹出一个文件选择对话框,用户可以选择一个文件,然后程序将从该文件中读取成绩,并将它们写入到原来的文件中。
阅读全文