代码之家  ›  专栏  ›  技术社区  ›  Leo Izen

Java没有删除文件

  •  0
  • Leo Izen  · 技术社区  · 15 年前

    Java没有删除文件。我确保它有权限(对每个人都有完全控制权,或者对unix-ers有777权限)。system.out.println(curarchive.delete())始终返回false。有人知道为什么吗?我试图用一个try-catch安全异常来包装它,但没有抛出。帮助?我确保我所有的河流都关闭了,但它仍然返回错误!

    这是我的代码:

    targzipmanagerview.java的addfile方法

    private void addInside(java.awt.event.ActionEvent evt) {
    if (isCurrArchived == EXTRACTING){
            final ActionEvent acevt = evt;
            JFileChooser jfc = new JFileChooser();
            jfc.setDialogType(JFileChooser.OPEN_DIALOG);
            jfc.setMultiSelectionEnabled(true);
            jfc.setAcceptAllFileFilterUsed(true);
            jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
            jfc.setDialogTitle("Choose files to add:");
            int result = jfc.showOpenDialog(theframe);
            if (result == JFileChooser.APPROVE_OPTION){
                File[] addsf = jfc.getSelectedFiles();
                totalNewFilesToAdd = new ArrayList<File>();
                ArrayList<File> newFilesToAdd = new ArrayList<File>();
                ArrayList<AbsRelFile> dirEntries = new ArrayList<AbsRelFile>();
                InputStream in = null;
                try {
                    in = new BufferedInputStream(new FileInputStream(currArchive));
                } catch (FileNotFoundException fnfe){
                    return;
                }
                currAStream = null;
                currCStream = null;
                CompressorStreamFactory cFactory = new CompressorStreamFactory();
                try {
                    CompressorInputStream temp = cFactory.createCompressorInputStream(in);
                    currCStream = temp.getName();
                    in = new BufferedInputStream(temp);
                } catch (CompressorException ex) {
                    //if it isn't compressed, do nothing!
                }
                ArchiveStreamFactory aFactory = new ArchiveStreamFactory();
                realIn = null;
                useZipFile = false;
                try {
                    realIn = aFactory.createArchiveInputStream(in);
                    currAStream = realIn.getArchiveName();
                    if (currAStream.equalsIgnoreCase(ArchiveStreamFactory.ZIP)){
                        useZipFile = true;
                        try {
                            realIn.close();
                        } catch (IOException ioe){
                            ioe.printStackTrace();
                        }
                    }
                } catch (ArchiveException ae){
                    //Bad Archive! oops!
                    new ErrorDialog(theframe, false).setVisible(true);
                    try {
                        in.close();
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                    return;
                }
                bytesToWrite = 0;
                if (!useZipFile){
                    ArchiveEntry ae;
                    try {
                        while ((ae = realIn.getNextEntry()) != null){
                            bytesToWrite += ae.getSize();
                        }
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                    try {
                        realIn.close();
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                } else {
                    ZipArchiveEntry ae;
                    try {
                        ZipFile zf = new ZipFile(currArchive);
                        Enumeration en = zf.getEntriesEnum();
                        while (en.hasMoreElements()){
                            ae = (ZipArchiveEntry) en.nextElement();
                            bytesToWrite += ae.getSize();
                        }
                        zf.close();
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                }
                try {
                    in = new BufferedInputStream(new FileInputStream(currArchive));
                } catch (FileNotFoundException fnfe){
                    return;
                }
                currAStream = null;
                currCStream = null;
                cFactory = new CompressorStreamFactory();
                try {
                    CompressorInputStream temp = cFactory.createCompressorInputStream(in);
                    currCStream = temp.getName();
                    in = new BufferedInputStream(temp);
                } catch (CompressorException ex) {
                    //if it isn't compressed, do nothing!
                }
                aFactory = new ArchiveStreamFactory();
                realIn = null;
                useZipFile = false;
                try {
                    realIn = aFactory.createArchiveInputStream(in);
                    currAStream = realIn.getArchiveName();
                    if (currAStream.equalsIgnoreCase(ArchiveStreamFactory.ZIP)){
                        useZipFile = true;
                        try {
                            realIn.close();
                        } catch (IOException ioe){
                            ioe.printStackTrace();
                        }
                    }
                } catch (ArchiveException ae){
                    //Bad Archive! oops!
                    new ErrorDialog(theframe, false).setVisible(true);
                    try {
                        in.close();
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                    return;
                }
                for (int i = 0;i<addsf.length;i++){
                    if (addsf[i].isFile()){
                        newFilesToAdd.add(addsf[i]);
                        totalNewFilesToAdd.add(addsf[i]);
                    }
                    if (addsf[i].isDirectory()){
                        dirEntries.addAll(recurseDir(addsf[i]));
                        totalNewFilesToAdd.addAll(recurseDir(addsf[i]));
                    }
                }
                for (int i = 0;i<totalNewFilesToAdd.size();i++){
                    bytesToWrite += totalNewFilesToAdd.get(i).length();
                }
                aentries = new ArchiveEntry[totalNewFilesToAdd.size()];
                for (int i = 0;i<newFilesToAdd.size();i++){
                    try {
                        aentries[i] = new ArchiveStreamFactory().createArchiveEntry(currAStream, newFilesToAdd.get(i), newFilesToAdd.get(i).getName());
                    } catch (ArchiveException ae){
                        ae.printStackTrace();
                    }
                }
                for (int i = newFilesToAdd.size();i<totalNewFilesToAdd.size();i++){
                    try {
                        aentries[i] = new ArchiveStreamFactory().createArchiveEntry(currAStream, dirEntries.get(i-newFilesToAdd.size()), dirEntries.get(i-newFilesToAdd.size()).getRelativePath());
                    } catch (ArchiveException ae){
                        ae.printStackTrace();
                    }
                }
                Thread iothread = new Thread(new Runnable(){
                    public void run(){
                        if (!useZipFile){
                            try {
                                EventQueue.invokeLater(new Runnable(){
                                    public void run(){
                                        addingBox = new AddingBox(theframe, false);
                                    }
                                });
                                File outfile = File.createTempFile("ScruffArchiveManager", null);
                                ArchiveOutputStream tempout = null;
                                CompressorOutputStream tempcomp = null;
                                if (currCStream == null) tempout = new ArchiveStreamFactory().createArchiveOutputStream(currAStream ,new BufferedOutputStream(new FileOutputStream(outfile)));
                                else {
                                    tempcomp = new CompressorStreamFactory().createCompressorOutputStream(currCStream, new BufferedOutputStream(new FileOutputStream(outfile)));
                                    tempout = new ArchiveStreamFactory().createArchiveOutputStream(currAStream, tempcomp);
                                }
                                if (currAStream.equals(ArchiveStreamFactory.TAR)){
                                    TarArchiveOutputStream t = (TarArchiveOutputStream)tempout;
                                    t.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
                                    tempout = t;
                                }
                                ArchiveEntry ae;
                                long bytesWritten = 0;
                                while ((ae = realIn.getNextEntry()) != null){
                                    long semiBytesWritten = 0;
                                    tempout.putArchiveEntry(ae);
                                    byte[] buffer = new byte[8024];
                                    int n = 0;
                                    if (ae.getSize() < semiBytesWritten + 8024) buffer = new byte[(int)(ae.getSize()-semiBytesWritten)];
                                    while (semiBytesWritten < ae.getSize() && -1 != (n = realIn.read(buffer))){
                                        tempout.write(buffer, 0, n);
                                        semiBytesWritten += n;
                                        bytesWritten += n;
                                        final long k = bytesWritten;
                                        EventQueue.invokeLater(new Runnable(){
                                            public void run(){
                                                addingBox.progressListener(new Progress(k, bytesToWrite));
                                            }
                                        });
                                        if (ae.getSize() < semiBytesWritten + 8024) buffer = new byte[(int)(ae.getSize()-semiBytesWritten)];
                                    }
                                    tempout.closeArchiveEntry();
                                }
                                realIn.close();
                                for (int i = 0;i<aentries.length;i++){
                                    InputStream in = new BufferedInputStream(new FileInputStream(aentries[i].getFile()));
                                    tempout.putArchiveEntry(aentries[i]);
                                    int n = 0;
                                    byte[] buffer = new byte[8024];
                                    while (-1 != (n = in.read(buffer))){
                                        tempout.write(buffer, 0, n);
                                        bytesWritten += n;
                                        final long k = bytesWritten;
                                        EventQueue.invokeLater(new Runnable(){
                                            public void run(){
                                                addingBox.progressListener(new Progress(k, bytesToWrite));
                                            }
                                        });
                                    }
                                    in.close();
                                    tempout.closeArchiveEntry();
                                }
                                tempout.close();
                                final File ne = new File(currArchive.getAbsolutePath());
                                System.out.println(currArchive.delete());
                                outfile.renameTo(ne);
                                EventQueue.invokeLater(new Runnable(){
                                    public void run(){
                                        closeArchive(acevt);
                                        openArchive(ne);
                                        addingBox.progressListener(new Progress(bytesToWrite, bytesToWrite));
                                    }
                                });
                            } catch (CompressorException ce){
                                ce.printStackTrace();
                            } catch (ArchiveException ae){
                                ae.printStackTrace();
                            } catch (IOException ioe){
                                ioe.printStackTrace();
                            }
                        }
                    }
                });
                iothread.start();
            }
        }
    }
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   thelost    15 年前

    尝试 myFile.toPath().delete() 以获取错误。永远不要忘记关闭 FileInputStream .