Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将最后一个元素的信息添加到ArrayList的末尾_Java_Arraylist_Indexoutofboundsexception - Fatal编程技术网

Java 将最后一个元素的信息添加到ArrayList的末尾

Java 将最后一个元素的信息添加到ArrayList的末尾,java,arraylist,indexoutofboundsexception,Java,Arraylist,Indexoutofboundsexception,我的问题很简单。我试图将arrayList的最后一个元素添加到该数组列表的末尾,其行如下: ArrayList.add(ArrayList.get(ArrayList.size())); 但我得到的是一种非同寻常的感觉 那么,有没有一种方法可以做到这一点而不出现异常呢?快速回答。该行不包含在任何循环中。arrayList具有大小。我已经用ArrayList.size()-1尝试过了,但是没有用。下面是它包含的完整代码块 public class SaveButtonListener im

我的问题很简单。我试图将arrayList的最后一个元素添加到该数组列表的末尾,其行如下:

   ArrayList.add(ArrayList.get(ArrayList.size()));
但我得到的是一种非同寻常的感觉

那么,有没有一种方法可以做到这一点而不出现异常呢?快速回答。该行不包含在任何循环中。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");
        }
    }
}
公共类SaveButtonListener实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
JFileChooser fileChooser=新的JFileChooser(“.”);
int status=fileChooser.showsavedilog(null);
if(status==JFileChooser.APPROVE\u选项){
File selectedFile=fileChooser.getSelectedFile();
字符串文件名=selectedFile.getPath();
File imageFolder=新文件(文件名);
mkdir();
//将路径标记为arraylist
字符串delims=“/”;
ArrayList fileTokensList=新的ArrayList();
String[]fileTokens=fileName.split(delims);
fileTokensList.addAll(Arrays.asList(fileTokens));
//添加当前图像的名称
添加(fileTokensList.get(fileTokensList.size());
//将所有令牌重建为一个字符串路径
StringBuilder=新的StringBuilder();
对于(int s=0;s
这段代码是用来将文件保存到某个位置的,我对令牌进行了大量的处理并重建了该路径。我是要走很长的路才能找到一个简单的解决方案,还是做得对?

ArrayList.get(int index)
如果
index
值介于0和
Array.size()之间,则可以使用-1
。由于您发送的是
Array.size()
,因此您将前往数组的无效位置,从而获得异常

如何解决这个问题?好吧,你应该把你想添加的内容发布出来,你会得到答案的

ArrayList<String> fileTokensList = new ArrayList<>();
一种方法是使用“+”串联运算符,编译器将自动为您创建字符串。

尝试更改:

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


我做了,它继续,但没有出现在屏幕上end@BlaineShelton我认为一点调试可能会对您有所帮助,首先检查
fileTokensList.get(fileTokensList.size()-1)返回的内容
然后,如果成功地实现了您想要的功能,请执行下一步,将其存储在某个变量中,然后添加。我正在尝试将最后一个元素中的信息添加到数组的末尾,而不是数组的大小(标题上我的错误)
ArrayList.add(ArrayList.get(ArrayList.size()));
ArrayList.add(ArrayList.get(ArrayList.size()-1));