- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个代码,可以将数百万个小文件组合成 tar 存档,因此我决定使用我的 Solaris 计算机的/tmp 文件夹。然后我创建了一个 ramdisk,现在我使用我创建的 ramdisk (/ramdata),而不是/tmp。这是我为完成任务所做的事情:
首先,我尝试在 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 机器..
下面是我尝试的最终代码..:我知道该代码有一些来 self 之前尝试的迹象 - 例如我实例化 File 对象并使用 fileExists 变量检查其存在的地方...... - 这肯定不会按预期工作,但因为现在我只是想查看 File.exists() 的真实结果,所以我忽略它们。主要的异常(exception)是 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)
这是 Jayan 建议的 TRUSS 命令的输出:它似乎无法解析路径:(但由于我不太擅长 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
最佳答案
所有问题都出在 tarName 变量定义中的额外空格..只需删除多余的空格..一切都会正常工作..
关于java - Solaris 10,java 6,file.exists 无法看到现有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8613705/
我想知道是否可以访问放在 tomcat 的 conf 文件夹中的文件。通常我会在这个文件中放置多个 webapp 的配置,在 war 之外。 我想使用类路径独立于文件系统。 我过去使用过 lib 文件
我有一个 PowerShell 脚本,它获取文件列表并移动满足特定条件的文件。为什么即使对象为空,foreach 循环也会运行? 我假设如果 $i 不存在,它就不会运行。但是如果 $filePath
我已将 BasicAccountRule.drl 放置在我的 Web 应用程序中,位置为:C:/workspace/exim_design/src/main/resources/rules/drl/i
我使用 File.open('file.txt').class 和 File.open('file.txt').readlines.class 以及前者进行了检查一个返回 File,后者返回 Arra
我正在尝试使用 FileOutputStream 删除文件,在其中写入内容后。这是我用来编写的代码: private void writeContent(File file, String fileC
我正在尝试使用 flink 和 python 批处理 api 测试 Wordcount 经典示例。我的问题是,将数据源从 env.from_elements() 修改为 env.read_text()
我正在尝试制作一个可以同时处理多个不同文件的程序。我的想法是制作一个包含 20 个 FILE* 的数组,以便在我达到此限制时能够关闭其中一个并打开请求的新文件。 为此,我想到了一个函数,它选择一个选项
我有两个文件A和B文件A: 976464 792992 文件B TimeStamp,Record1,976464,8383,ABCD 我想搜索文件 A 和文件 B 中的每条记录并打印匹配的记录。打印的
我有一些保存在 map 中的属性文件。示例: Map map = new HashMap<>(); map.put("1", "One"); map.put("2", "Two"); map.put(
我正在尝试找出一个脚本文件,该文件接受一个包含文件列表的文件(每一行都是一个文件路径,即 path/to/file)并将它们合并到一个文件中。 例如: list.text -- path/to/fil
为了使用 File.CreateText() 和 File.AppendText() 你必须: 通过调用这些方法之一打开流 写消息 关闭流 处理流 为了使用 File.AppendAllText()
使用rsync时,如何在使用--files-from参数复制时重命名文件?我有大约190,000个文件,在从源复制到目标时,每个文件都需要重命名。我计划将文件列表放在一个文本文件中传递给--files
我在非服务器应用程序中使用 Spring(只需从 Eclipse 中某个类的 main() 编译并运行它)。 我的问题是作为 new FileSystemXmlApplicationContext 的
QNX (Neutrino 6.5.0) 使用 ksh 的开源实现作为其 shell 。许多提供的脚本,包括系统启动脚本,都使用诸如 if ! test /dev/slog -ef /dev/slog
当我尝试打开从我的应用程序下载的 xls 文件时,出现此错误: excel cannot open the file because the file format or file extension
有一些相关的概念,即文件指针、流和文件描述符。 我知道文件指针是指向数据类型 FILE 的指针(在例如 FILE.h 和 struct_FILE.h 中声明)。 我知道文件描述符是 int ,例如成员
好吧,这应该很容易... 我是groovy的新手,我希望实现以下逻辑: def testFiles = findAllTestFiles(); 到目前为止,我想出了下面的代码,该代码可以成功打印所有文
我理解为什么以下内容会截断文件的内容: Get-Content | Out-File 这是因为 Out-File 首先运行,它会在 Get-Content 有机会读取文件之前清空文件。 但是当我尝
您好,我正在尝试将文件位置表示为变量,因为最终脚本将在另一台机器上运行。这是我尝试过的代码,然后是我得到的错误。在我看来,python 是如何添加“\”的,这就是导致问题的原因。如果是这种情况,我如何
我有一个只包含一行的输入文件: $ cat input foo bar 我想在我的脚本中使用这一行,据我所知有 3 种方法: line=$(cat input) line=$( input"...,
我是一名优秀的程序员,十分优秀!