遍历UNIX上文件目录的问题

newyu1127 2007-12-25 09:48:35
各位师兄:
如何遍历一个UNIX上的目录,比如我传入一个参数(是相对路径如:\temp\command),然后我想遍历这个目录(包含它的了目录),将文件名为:test###cmd.sh(即以test开头,cmd.sh结尾)的所有文件找到,每找出一个文件,就执行一个文件(因为sh文件就是UNIX上的批处理文件)。怎么写,谢谢指教。
...全文
183 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huoyin 2007-12-29
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.UnsupportedClassVersionError:

这个是因为你的windows与linux的jdk版本不一致的问题,解决办法是将你的java文件用linux下的jdk重新编译一下就行了

另外有个疑问就是,.sh文件可以在windows下运行?是不是里面的命令是windows命令而不是linux的命令?
老紫竹 2007-12-29
  • 打赏
  • 举报
回复
Unsupported major.minor version 49.0)

原因是:你的运行JDK版本低于你的编译JDK版本,
比如,你用 5.0 编译的,却要在1.4下运行。
chenhongxin 2007-12-29
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.IOException;

public class PassS {

public static void main(String[] args) throws IOException {
PassS p = new PassS();
p.del("\\user\\123\\1");
}

public void del(String filepath) throws IOException {
File f = new File(filepath);// 定义文件路径
if (f.exists() && f.isDirectory()) {// 判断是文件还是目录
if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除
f.delete();
} else {// 若有则把文件放进数组,并判断是否有下级目录
File delFile[] = f.listFiles();
int i = f.listFiles().length;
for (int j = 0; j < i; j++) {
if (delFile[j].isDirectory()) {

del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径
}
delFile[j].delete();// 删除文件
}
}
del(filepath);// 递归调用
}

}

}
newyu1127 2007-12-27
  • 打赏
  • 举报
回复
很奇怪,我写了一个程序
public class TMain {

public static void main(String[] args) {

File runSh;
runSh=new File("/tmp/test.sh");
if(runSh.exists()){
System.out.println("test.sh is ok");

try {
Runtime run = Runtime.getRuntime();
Process pro = run.exec("/tmp/test.sh"); System.out.println("run test.sh is over");
} catch (Exception e) {
e.printStackTrace();
}

}else{
System.out.println("test.sh is fail!");
}
}
}
在WINDOWS下运行是正常的,为什么在UNIX下运行就跳出以下错误

Exception in thread "main" java.lang.UnsupportedClassVersionError: temiptest/TMa
in (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
newyu1127 2007-12-25
  • 打赏
  • 举报
回复
谢谢楼上的,但还有一个问题,JAVA中如何调用UNIX中的运行指令来运行.sh文件呢?
老紫竹 2007-12-25
  • 打赏
  • 举报
回复
给你一个逐级删除文件的程序,你把 delete 改成你要的吧!

import java.io.File;
import java.io.IOException;

public class PassS {

public static void main(String[] args) throws IOException {
PassS p = new PassS();
p.del("\\user\\123\\1");
}

public void del(String filepath) throws IOException {
File f = new File(filepath);// 定义文件路径
if (f.exists() && f.isDirectory()) {// 判断是文件还是目录
if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除
f.delete();
} else {// 若有则把文件放进数组,并判断是否有下级目录
File delFile[] = f.listFiles();
int i = f.listFiles().length;
for (int j = 0; j < i; j++) {
if (delFile[j].isDirectory()) {

del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径
}
delFile[j].delete();// 删除文件
}
}
del(filepath);// 递归调用
}

}

}
feizm 2007-12-25
  • 打赏
  • 举报
回复
我的个人建议是,在这种情况下,不需要用JAVA调用外部SHELL命令。
直接写一个C SHELL,根据参数,遍历子目录,然后执行SHELL即可~
这样写比较简单,一方面,各个SHELL的运行可能需要设置环境变量,用JAVA的话可能会稍显麻烦。
其次,直接用C SHELL写,维护,修改也方便一些
老紫竹 2007-12-25
  • 打赏
  • 举报
回复
我想和调用Windows下面的没有区别吧!

Runtime run = Runtime.getRuntime();
Process pro = run.exec(""); // 这里写上脚本命令吧!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧