Java 循环只删除第一个文件

Java 循环只删除第一个文件,java,file,delete-file,Java,File,Delete File,我在删除所有选定文件时遇到问题。我试图做的是在点击“添加”后,选择的任何文件都会被移动到一个新文件夹,并在以前的文件夹中被删除。一个文件就可以了。它删除并移动文件。但是不止一个而且只有第一个被删除。我的循环是识别每个文件,而不是删除它们。我正在发布actionevent。如果需要更多的代码,请告诉我。我已经指出了问题所在,所以我认为,这样您就不必搜索代码了 public void actionPerformed(ActionEvent e) { int returnValue = 0;

我在删除所有选定文件时遇到问题。我试图做的是在点击“添加”后,选择的任何文件都会被移动到一个新文件夹,并在以前的文件夹中被删除。一个文件就可以了。它删除并移动文件。但是不止一个而且只有第一个被删除。我的循环是识别每个文件,而不是删除它们。我正在发布actionevent。如果需要更多的代码,请告诉我。我已经指出了问题所在,所以我认为,这样您就不必搜索代码了

public void actionPerformed(ActionEvent e) {
    int returnValue = 0;
    int option = 0;
    File[] selectedFiles = new File[0];

    if (e.getActionCommand().equals("CLOSE")) System.exit(0);

    else if (e.getActionCommand().equals("ADD")) {
        JFileChooser chooser = new JFileChooser();
        chooser.setMultiSelectionEnabled(true);
        returnValue = chooser.showOpenDialog(this);         

        if (returnValue == JFileChooser.APPROVE_OPTION) {

            File[] file = chooser.getSelectedFiles();                   

            try {
                FileInputStream fstream = null;
                FileOutputStream ostream = null;

                for (int i = 0; i < file.length; i++) {

                   fstream = new FileInputStream(file[i]);
                           ostream = new      
                                       FileOutputStream(file[i].getName());

                    Path path = Paths.get(file[i].getPath());
                    byte[] fileArray;
                    fileArray = Files.readAllBytes(path);

                    listModel.add(0, file[i].getName());
                    selectedFilesList.setModel(listModel);
                                  //ostream.write(fileArray, 0, fileArray.length);

                }

                fstream.close();
                //ostream.close();

                try {

                    for(int i = 0; i < file.length; i++) {
//**----------------------->>>PROBLEM**                     
                    Files.delete(Paths.get(file[i].getPath()));
                    System.out.println(file[i].getName());

                    }


                } catch (NoSuchFileException x) {}
        System.err.format("%s: no such" + " file or directory%n")
                } catch (DirectoryNotEmptyException x) {
                    System.err.format("%s not empty%n");
                } catch (IOException x) {
                    // File permission problems are caught here.
                    System.err.println(x);
                } catch (Exception err) {
            }
        }
public void actionPerformed(ActionEvent e){
int返回值=0;
int选项=0;
文件[]selectedFiles=新文件[0];
如果(如getActionCommand().equals(“CLOSE”))System.exit(0);
else if(例如getActionCommand().equals(“ADD”)){
JFileChooser chooser=新的JFileChooser();
选择器。setMultiSelectionEnabled(真);
returnValue=chooser.showOpenDialog(此);
if(returnValue==JFileChooser.APPROVE\u选项){
File[]File=chooser.getSelectedFiles();
试一试{
FileInputStream fstream=null;
FileOutputStream ostream=null;
for(int i=0;i>>问题**
Files.delete(path.get(file[i].getPath());
System.out.println(文件[i].getName());
}
}catch(NoSuchFileException x){}
System.err.format(“%s:没有这样的“+”文件或目录%n”)
}捕获(DirectoryNotEmptyException x){
系统错误格式(“%s”不是空的%n”);
}捕获(IOX异常){
//这里发现了文件权限问题。
系统错误println(x);
}捕获(异常错误){
}
}

不要那样移动文件

  • 如果您使用的是Java7,请看这个

  • 对于旧版本,请使用


  • 编辑:若要了解代码不起作用的原因,请使用调试器。我认为您的删除循环是由于异常而留下的。

    这可能是由于您未能在第一个循环中关闭文件流造成的

                for (int i = 0; i < file.length; i++) {
                   fstream = new FileInputStream(file[i]);
                           ostream = new      
                                       FileOutputStream(file[i].getName()); // This is never closed
    
                    Path path = Paths.get(file[i].getPath());
                    byte[] fileArray;
                    fileArray = Files.readAllBytes(path);
    
                    listModel.add(0, file[i].getName());
                    selectedFilesList.setModel(listModel);
                                  //ostream.write(fileArray, 0, fileArray.length);
    
                }
    
                fstream.close();  // Only the last input stream is closed 
    
    for(int i=0;i
    应该更像

                for (int i = 0; i < file.length; i++) {
                  try {
                     fstream = new FileInputStream(file[i]);
                     ostream = new      
                          FileOutputStream(file[i].getName());
    
                      Path path = Paths.get(file[i].getPath());
                      byte[] fileArray;
                      fileArray = Files.readAllBytes(path);
    
                      listModel.add(0, file[i].getName());
                      selectedFilesList.setModel(listModel);
                      //ostream.write(fileArray, 0, fileArray.length);
                   } finally {
                     fstream.close();
                     ostream.close();
                   }
                }
    
    for(int i=0;i
    关闭与打开的文件数量相同的文件

    这可能会导致您的问题,因为除了一个文件外,所有文件都会被锁定,从而阻止删除


    还有catch异常块(最后一条语句)与错误无关。

    您是否看到任何异常的证据?此外,您的
    IOException
    catch
    子句,尤其是
    Exception
    的输出非常吝啬。堆栈跟踪比异常的字符串表示(或什么都没有)更有用。没有得到任何异常。它运行,如果我系统输出文件名,它会显示所选的3个文件,但当尝试删除第一个文件时,它会显示。你在哪个系统上,什么java版本,文件是否位于网络共享上?我最近读到一个关于windows上旧java版本的错误,其中文件描述符没有正确释放当文件驻留在网络驱动器上时,会发生异常。您如何确保没有异常?您只需处理NoSuchFileException、DirectoryNotEmptyException和IOException。Exection的捕获块为空。我确定会抛出某些内容…Windows 7 JDK 1.7文件在我的计算机上。只是从文件夹移动到foldernice。我不知道在。但是这与为什么所有的文件都没有被移动有关吗?我让它们都被关闭了。但是它们的行为是一样的。但是我会试试你的方法。至于最后一个异常,应用程序似乎只是在运行,而不是执行完整的循环。这就是为什么我没有去处理最后一个异常块,因为我已经尝试了一千种方法来获得它这很有用