各位师兄:
  如何遍历一个UNIX上的目录,比如我传入一个参数(是相对路径如:\temp\command),然后我想遍历这个目录(包含它的了目录),将文件名为:test###cmd.sh(即以test开头,cmd.sh结尾)的所有文件找到,每找出一个文件,就执行一个文件(因为sh文件就是UNIX上的批处理文件)。怎么写,谢谢指教。

解决方案 »

  1.   

    给你一个逐级删除文件的程序,你把 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);// 递归调用
        }  }}
      

  2.   

    谢谢楼上的,但还有一个问题,JAVA中如何调用UNIX中的运行指令来运行.sh文件呢?
      

  3.   

    我想和调用Windows下面的没有区别吧!Runtime   run   =   Runtime.getRuntime();   
    Process   pro   =   run.exec(""); // 这里写上脚本命令吧!
      

  4.   

    我的个人建议是,在这种情况下,不需要用JAVA调用外部SHELL命令。
    直接写一个C SHELL,根据参数,遍历子目录,然后执行SHELL即可~
    这样写比较简单,一方面,各个SHELL的运行可能需要设置环境变量,用JAVA的话可能会稍显麻烦。
    其次,直接用C SHELL写,维护,修改也方便一些
      

  5.   

    很奇怪,我写了一个程序
    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)
      

  6.   

    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);// 递归调用
        }  }}
      

  7.   

    Unsupported   major.minor   version   49.0)原因是:你的运行JDK版本低于你的编译JDK版本,
    比如,你用 5.0 编译的,却要在1.4下运行。
      

  8.   

    Exception   in   thread   "main"   java.lang.UnsupportedClassVersionError:这个是因为你的windows与linux的jdk版本不一致的问题,解决办法是将你的java文件用linux下的jdk重新编译一下就行了另外有个疑问就是,.sh文件可以在windows下运行?是不是里面的命令是windows命令而不是linux的命令?