public boolean copyFile( String oldFile, String newFile )
    {
        boolean rtn = false;        try
        {
            System.out.println( "" + "cmd /c copy " + oldFile + " " + newFile );
            Runtime.getRuntime().exec( "cmd /c copy " + oldFile + " " + newFile );
            rtn = true;
        }
        catch ( Exception e )
        {
            log.error( e );
        }        return rtn;
    }
public void deleteFile( String deleteFile )
    {
        try
        {
            File file = new File( deleteFile );
            file.delete();
        }
        catch ( Exception e )
        {
            log.error( e );
        }
    }
copyFile和deleteFile分开单独调试均是成功的,但是我在一起调用的时候,先调用copyFile,成功后再调用deleteFile,却出现一个很奇怪的问题,就是文件还未被复制就已经被删除了,请教原因?boolean bl = this.copyFile( FileConfig.PATH_RECEIVE + File.separator + fileName, FileConfig.PATH_BACKUP + File.separator + prefixName + dt + postfixName );if ( bl )
//删除已复制的文件
this.deleteFile( FileConfig.PATH_RECEIVE + File.separator + fileName );

解决方案 »

  1.   

    Runtime.getRuntime().exec( "cmd /c copy " + oldFile + " " + newFile );
    是创建一个新进程,创建完之后就立即返回,这时copyFile( String oldFile, String newFile )也返回,也就是Runtime.getRuntime().exec( "cmd /c copy " + oldFile + " " + newFile );和this.deleteFile( FileConfig.PATH_RECEIVE + File.separator + fileName );是两个并行进行的进程,哪个先执行还不确定,就出现了先删除的情况。
      

  2.   

    准确地说是cmd /c copy " + oldFile + " " + newFile和this.deleteFile( FileConfig.PATH_RECEIVE + File.separator + fileName );并行