Солярис 10, Java 6, file.exists не может увидеть существующий файл - PullRequest
1 голос
/ 23 декабря 2011

У меня есть код, который собирает миллионы маленьких файлов в архивы tar, и поэтому я решил использовать папку / tmp моей машины Solaris.затем я создал ramdisk и вместо / tmp я теперь использую ramdisk (/ ramdata), который я создал .. вот что я сделал для выполнения миссии:

сначала я попытался создать архив tar в ramdisk, а затем переместитьв целевой каталог, но когда я делаю это, java File.exists () не смог вернуть true, когда файл существовал.затем я изменил каталог на каталог на диске (opt / dist / dist1 / cdrepo), чтобы поместить мой tar-файл, и tar-файл был успешно создан там, но снова File.exists () не смог вернуть true, когда файл там.

тогда я увидел этот пост Альтернатива File.exists () в Java , и я соответствующим образом изменил свой код, чтобы NFS сбрасывал кэш, но он не работал.

Кто-нибудь может предложить какое-либо решение или идею о том, почему это происходит и как я могу решить эту проблему?спасибо всем.

Я использую Java6U21, и это машина Solaris 10. ..

ниже - окончательный код моих попыток ..: я знаю, что у кода есть некоторые признаки из моегопредыдущие попытки - например, место, где я создаю экземпляр объекта File и проверяю его существование с помощью переменной fileExists ... - это определенно не будет работать должным образом, но сейчас я просто пытаюсь увидеть истинный результат для File.exists (Я их игнорирую.Основное исключение - метод строки czf.take_md5, первая строка которого FileInputStream fis = new FileInputStream(filename);

public static synchronized void CreateZipFileFromSingleFolder(String folder,int CDNumber) throws Exception{

    CreateZipFile czf = new CreateZipFile();
        System.err.println(folder + " tarlaniyor...");
        Process p=null;

        String tarName=CDFolderInfo.getID()+"_cd_"+CDNumber + ".tar ";
        String tarFolder=CDFolderInfo.getPathRoot();
        //String komut = "tar -cf " + tarFolder+"/"+tarName+"  "+ folder;
        String komut = "tar -cf " + "/opt/dist/dist1/cdrepo/"+tarName+"  "+ folder;
        try {
            System.err.println(komut + " ----- komutu ile tarlama yapilacak.......");
            p = Runtime.getRuntime().exec(komut);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            p.waitFor();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.err.println("system exit value:  "  + p.exitValue());
        if(p.exitValue()==0)
        {
                Process p3=null;
                p3=Runtime.getRuntime().exec("ls -l /opt/dist/dist1/cdrepo");
                p3.waitFor();
                if(p3.exitValue()==0)
                    System.err.println("LS CDREPO ICIN BASARILI OLARAK CALISTI...");

                /*Process p4=null;
                p4=Runtime.getRuntime().exec("ls -l " +tarFolder+"/"+tarName);
                p4.waitFor();
                if(p4.exitValue()==0)
                    System.err.println("LS TAR FOLDER ICIN BASARILI OLARAK CALISTI...");
                */

                File f2=new File("/opt/dist/dist1/cdrepo/"+tarName);

                System.err.println("Absolute Path : "+f2.getAbsolutePath());
                System.err.println("         Path : "+f2.getPath());
                System.err.println("Canonical Path : "+f2.getCanonicalPath());
                System.err.println("is File : "+f2.isFile());
                System.err.println("Length : "+f2.length());
                System.err.println("is Hidden : "+f2.isHidden());

                if(f2.exists())
                    System.err.println("Dosya cdrepoda...");
                else 
                    System.err.println("dosya derepoda degil...");
                f2=null;

                try {
                    czf.take_md5("/opt/dist/dist1/cdrepo/"+tarName);
                    System.err.println("MD5 alma succeed...");
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



                /*
                if(f2.exists())
                    System.err.println("Tar tasima succeed..");
                else 
                    System.err.println("move komutu basarili , ama dosyayi bulamiyorum...");
                f2=null;*/



            }else
                System.err.println("p == 0 yanlis... Tar olusturma failed..");


            /*System.err.println("tar file existence will be checked..");*/
            File f=new File(tarFolder+"/"+tarName);
            boolean fileExists = FileUtils.waitFor(f, 10);
            if(fileExists){
                System.err.println("tar succeeded .... " + tarFolder+"/"+tarName);
                System.err.println("tar file existence PASSED ..");
            }else{
                System.err.println("tar process didnt fail, but actually failed...");
            }
            f=null;

        /*  Process p2 = Runtime.getRuntime().exec("mv " + tarFolder+"/"+tarName+"  "+ "cdrepo/"+tarName);
            p2.waitFor();*/

        //if(p2.exitValue()==0){
                //System.err.println("p2 == 0 kontrolu dogru....");
                Process p1=null;
                try {
                    p1 = Runtime.getRuntime().exec("rm -rf " + folder );
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    p1.waitFor();
                    if(p1.exitValue()==0)
                        System.err.println("Dizin silme tamamlandı... " + folder);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }       
    //  }
}

, а результат:

    /ramdata/cdtemp_125_1 tarlaniyor...
tar -cf /opt/dist/dist1/cdrepo/125_cd_1.tar   /ramdata/cdtemp_125_1 ----- komutu ile tarlama yapilacak.......
system exit value:  0
LS CDREPO ICIN BASARILI OLARAK CALISTI...
Absolute Path : /opt/dist/dist1/cdrepo/125_cd_1.tar 
         Path : /opt/dist/dist1/cdrepo/125_cd_1.tar 
Canonical Path : /opt/dist/dist1/cdrepo/125_cd_1.tar 
is File : false
Length : 0
is Hidden : false
dosya derepoda degil...
java.io.FileNotFoundException: /opt/dist/dist1/cdrepo/125_cd_1.tar  (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at staticcdbuildernewver.CreateZipFile.take_md5(CreateZipFile.java:34)
        at staticcdbuildernewver.OracleSideDbOps.CreateZipFileFromSingleFolder(OracleSideDbOps.java:723)

И ЭТО ВЫХОДКоманда TRUSS, предложенная Джаяном: кажется, она не может разрешить путь :( но, поскольку я не очень хорош в Linux UNIX, я не могу понять, что это значит ..

/37:    1179.9948       write(2, " L S   C D R E P O   I C".., 41)      = 41
/21:    1179.9948       lwp_cond_wait(0x08234D48, 0x08234D30, 0xB60D6C08, 0) = 0
/21:    1179.9949       mprotect(0xFEC60000, 4096, PROT_READ)           = 0
/37:    1179.9950           Incurred fault #6, FLTBOUNDS  %pc = 0xFE4B49A1
/37:          siginfo: SIGSEGV SEGV_ACCERR addr=0xFEC60280
/37:    1179.9950           Received signal #11, SIGSEGV [caught]
/37:          siginfo: SIGSEGV SEGV_ACCERR addr=0xFEC60280
/21:    1179.9950       mprotect(0xFEC60000, 4096, PROT_READ|PROT_WRITE) = 0
/37:    1179.9950       lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0x0000FFF7) = 0xFFBFFEFF [0x0000FFFF]
/37:    1179.9951       setcontext(0xB5A6C1C0)
/21:    1179.9951       mprotect(0xFEE20000, 4096, PROT_NONE)           = 0
/21:    1179.9957       mprotect(0xFEE20000, 4096, PROT_READ)           = 0
/21:    1179.9958       lwp_cond_signal(0x0849D448)                     = 0
/37:    1179.9958       lwp_cond_wait(0x0849D448, 0x0849D430, 0x00000000, 0) = 0
/21:    1179.9959       lwp_cond_signal(0x084BDC48)                     = 0
/39:    1179.9959       lwp_cond_wait(0x084BDC48, 0x084BDC30, 0x00000000, 0) = 0
/37:    1179.9959       write(2, "\n", 1)                               = 1
/39:    1179.9959       mprotect(0xB5BDC000, 12288, PROT_READ|PROT_WRITE) = 0
/37:    1179.9960       write(2, " / o p t / d i s t / d i".., 15)      = 15
/39:    1179.9960       lwp_sigmask(SIG_SETMASK, 0x00000004, 0x00000000) = 0xFFBFFEFF [0x0000FFFF]
/37:    1179.9961       write(2, "\n", 1)                               = 1
/39:    1179.9961       lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0x0000FFF7) = 0xFFBFFEFF [0x0000FFFF]
/37:    1179.9962       write(2, "\n", 1)                               = 1
/39:    1179.9962       lwp_exit()
/37:    1179.9963       write(2, " / o p t / d i s t / d i".., 15)      = 15
/37:    1179.9964       write(2, "\n", 1)                               = 1
/37:    1179.9964       write(2, "\n", 1)                               = 1
/37:    1179.9965       write(2, " A b s o l u t e   P a t".., 52)      = 52
/37:    1179.9966       write(2, "\n", 1)                               = 1
/37:    1179.9967       write(2, "                   P a t".., 52)      = 52
/37:    1179.9967       write(2, "\n", 1)                               = 1
/37:    1179.9968       resolvepath("/opt/dist/dist1/cdrepo/125_cd_1.tar ", 0xB5A6C3C0, 1024) Err#2 ENOENT
/37:    1179.9969       resolvepath("/opt/dist/dist1/cdrepo", "/opt/dist/dist1/cdrepo", 1024) = 22
/37:    1179.9970       write(2, " C a n o n i c a l   P a".., 53)      = 53
/37:    1179.9970       write(2, "\n", 1)                               = 1
/37:    1179.9971       stat64("/opt/dist/dist1/cdrepo/125_cd_1.tar ", 0xB5A6C6C0) Err#2 ENOENT
/37:    1179.9972       write(2, " i s   F i l e   :   f a".., 15)      = 15
/37:    1179.9972       write(2, "\n", 1)                               = 1
/37:    1179.9973       stat64("/opt/dist/dist1/cdrepo/125_cd_1.tar ", 0xB5A6C700) Err#2 ENOENT
/37:    1179.9974       write(2, " L e n g t h   :   0", 10)            = 10
/37:    1179.9975       write(2, "\n", 1)                               = 1
/37:    1179.9975       stat64("/opt/dist/dist1/cdrepo/125_cd_1.tar ", 0xB5A6C6C0) Err#2 ENOENT
/37:    1179.9976       write(2, " i s   H i d d e n   :  ".., 17)      = 17
/37:    1179.9977       write(2, "\n", 1)                               = 1
/37:    1179.9977       write(2, " / o p t / d i s t / d i".., 15)      = 15
/37:    1179.9978       write(2, "\n", 1)                               = 1
/37:    1179.9979       write(2, "\n", 1)                               = 1
/37:    1179.9979       stat64("/opt/dist/dist1/cdrepo/125_cd_1.tar ", 0xB5A6C700) Err#2 ENOENT
/37:    1179.9980       write(2, " d o s y a   d e r e p o".., 23)      = 23
/37:    1179.9980       write(2, "\n", 1)                               = 1
/37:    1179.9981       open64("/opt/dist/dist1/cdrepo/125_cd_1.tar ", O_RDONLY) Err#2 ENOENT
/37:    1179.9983       write(2, " j a v a . i o . F i l e".., 95)      = 95
/37:    1179.9984       write(2, "\n", 1)                               = 1
/37:    1179.9986       write(2, "\t a t   j a v a . i o .".., 47)      = 47
/37:    1179.9986       write(2, "\n", 1)                               = 1
/37:    1179.9987       write(2, "\t a t   j a v a . i o .".., 60)      = 60
/37:    1179.9987       write(2, "\n", 1)                               = 1
/37:    1179.9988       write(2, "\t a t   j a v a . i o .".., 59)      = 59
/37:    1179.9988       write(2, "\n", 1)                               = 1
/37:    1179.9989       write(2, "\t a t   s t a t i c c d".., 71)      = 71
/37:    1179.9990       write(2, "\n", 1)                               = 1
/37:    1179.9990       write(2, "\t a t   s t a t i c c d".., 97)      = 97
/37:    1179.9991       write(2, "\n", 1)                               = 1
/37:    1179.9991       write(2, "\t a t   s t a t i c c d".., 68)      = 68
/37:    1179.9992       write(2, "\n", 1)                               = 1
/37:    1179.9993       write(2, "\t a t   s t a t i c c d".., 87)      = 87
/37:    1179.9993       write(2, "\n", 1)                               = 1
/37:    1179.9994       write(2, "\t a t   s t a t i c c d".., 55)      = 55
/37:    1179.9995       write(2, "\n", 1)                               = 1
/37:    1179.9995       write(2, "\t a t   j a v a . l a n".., 41)      = 41

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

вся проблема заключается в дополнительном пробеле в определении переменной tarName .. просто удалите лишний пробел .. и все будет работать нормально ..

0 голосов
/ 23 декабря 2011

Только попробуй

if(f2.exists())
     System.err.println("Dosya cdrepoda...");
else {
     System.err.println("dosya derepoda degil...");
     f2.getParentFile().mkdirs();
}
...