0

我的问题很简单。我正在尝试将 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");
        }
    }
}

这段代码旨在将文件保存到某个位置,并且我做了很多弄乱令牌和重建该路径的工作。我是在走很长的路来找到一个简单的解决方案,还是我做得对?

4

3 回答 3

1

ArrayList.get(int index)如果index值介于 0 和Array.size() - 1. 由于您要发送Array.size(),因此您将转到数组的无效位置,从而获得异常。

如何解决这个问题?好吧,您应该发布您要添加的内容,您会得到答案。

于 2013-05-24T16:40:34.427 回答
0

尝试改变:

ArrayList.add(ArrayList.get(ArrayList.size()));

ArrayList.add(ArrayList.get(ArrayList.size()-1));
于 2013-05-24T16:45:07.700 回答
0
ArrayList<String> fileTokensList = new ArrayList<>();

您的列表包含字符串,因此您需要获取列表的大小并将其转换为字符串,然后再将其添加到列表中。

list.add( list.size() + "")

一种方法是使用“+”连接运算符,编译器会自动为您创建一个字符串。

于 2013-05-24T16:42:41.117 回答