我的问题很简单。我正在尝试将 arrayList 的最后一个元素添加到该数组列表的末尾,如下所示:
ArrayList.add(ArrayList.get(ArrayList.size()));
但我得到的是一个 indexOutOfBoundsException。
那么有没有办法做到这一点而不会出现异常?快速回答。此行不包含在任何循环中。arrayList 有大小。我已经用 ArrayList.size()-1 尝试过,但无济于事,这里是它包含的完整代码块。
public class SaveButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser(".");
int status = fileChooser.showSaveDialog(null);
if (status == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
String fileName = selectedFile.getPath();
File imageFolder = new File(fileName);
imageFolder.mkdir();
//tokenizes the path into an arraylist
String delims = "/";
ArrayList<String> fileTokensList = new ArrayList<>();
String[] fileTokens = fileName.split(delims);
fileTokensList.addAll(Arrays.asList(fileTokens));
//adds the name of the current image
fileTokensList.add(fileTokensList.get(fileTokensList.size()));
//rebuilds all the tokens into one string path
StringBuilder builder = new StringBuilder();
for (int s = 0; s < fileTokensList.size(); s++) {
if (s == 0) {
builder.append(fileTokensList.get(s));
} else {
builder.append("/");
builder.append(fileTokensList.get(s));
}
}
String textFileName = builder.toString();
System.out.println(textFileName);
try {
File saveFile = new File(textFileName);
FileWriter fileWriter = new FileWriter(saveFile);
try (BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) {
for (int i = 0; i < Driver.vehicleList.size()+1; i++) {
//writes the text file (one entry per line
bufferedWriter.write(Driver.vehicleList.get(i).getPrice());
bufferedWriter.write("\t");
bufferedWriter.write(Driver.vehicleList.get(i).getYear());
bufferedWriter.write("\t");
bufferedWriter.write(Driver.vehicleList.get(i).getMake());
bufferedWriter.write("\t");
bufferedWriter.write(Driver.vehicleList.get(i).getModel());
bufferedWriter.write("\t");
bufferedWriter.write(Driver.vehicleList.get(i).getComments());
bufferedWriter.newLine();
//adds the name of the current image
fileTokensList.add(Integer.toString(i));
//rebuilds all the tokens into one string path
StringBuilder imagePathBuilder = new StringBuilder();
for (int s = 0; s < fileTokensList.size(); s++) {
if (s == 0) {
imagePathBuilder.append(fileTokensList.get(s));
} else {
imagePathBuilder.append("/");
imagePathBuilder.append(fileTokensList.get(s));
}
}
String imageFileName = builder.toString();
//resaves the picture to the same place
Path FROM = Paths.get(Driver.vehicleList.get(i).getCarPicture());
Path TO = Paths.get(imageFileName);
//overwrite existing file, if exists
CopyOption[] options = new CopyOption[]{
StandardCopyOption.REPLACE_EXISTING,
StandardCopyOption.COPY_ATTRIBUTES
};
Files.copy(FROM, TO, options);
}
}
} catch (IOException IO) {
System.out.println("Error writing to file");
}
JOptionPane.showMessageDialog(null, "All your information has been saved");
}
}
}
这段代码旨在将文件保存到某个位置,并且我做了很多弄乱令牌和重建该路径的工作。我是在走很长的路来找到一个简单的解决方案,还是我做得对?