我有組成數百萬小文件到tar歸檔代碼,因此,我決定用我的Solaris機器上的/ tmp文件夾。然後我創建了一個ramdisk,而不是/ tmp我現在使用我創建的ramdisk(/ ramdata).. 這裏是我完成任務的地方:的Solaris 10,Java 6中,file.exists看不到現有的文件
首先,我嘗試在ramdisk中創建tar歸檔文件,目標目錄,但是當我這樣做時,java的File.exists()在文件存在時無法返回true。然後我將目錄更改爲磁盤上的目錄(opt/dist/dist1/cdrepo)以放入我的tar文件,並在那裏成功創建了tar文件,但是當文件存在時,File.exists()無法返回true。
然後我看到這個帖子Alternative to File.exists() in Java和我適時改變我的代碼,以便將NFS重置緩存,但它沒有工作也沒有。
任何人都可以提出關於爲什麼會發生任何解決方案或想法,我怎樣才能解決這個問題?謝謝大家。
我使用Java6U21,它是Solaris 10機..
下面是我tryings的最終代碼..:我知道代碼中有我以前的tryings一些跡象 - 如德地方我實例化一個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)
,這是桁架命令的輸出即傑恩建議: 似乎它不能解析路徑:(但正如我在UNIX Linux的也不好,我不能非常明白它的意思..
/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
難道說的Solaris用戶不有足夠的訪問權限來獲取目錄中的文件列表? – bezmax 2011-12-23 08:33:00
我使用這個Java程序從一個SSH連接窗口,並與root用戶連接..是否有任何情況下,根目錄不會有目錄列表權限? – iteyran 2011-12-23 08:54:48
Ramdisk不是NFS安裝的。 – 2011-12-23 08:56:42