使用Java列出文件而不使用java.io

时间:2009-10-15 11:39:21

标签: java

如何在不使用java.io。*?

的情况下列出当前目录中的文件和目录

4 个答案:

答案 0 :(得分:10)

这实际上是可以的,无需编写任何JNI或进行任何运行时调用。

import java.net.URL;

import sun.net.www.content.text.PlainTextInputStream;

public class NoIO {
  public static void main(String args[]) {
    NoIO n = new NoIO();
    n.doT();
  }

  public void doT() {
    try {
      //Create a URL from the user.dir (run directory)
      //Prefix with the protocol file:/
      //Users java.net
      URL u = new URL("file:/"+System.getProperty("user.dir"));

      //Get the contents of the URL (this basically prints out the directory
      //list. Uses sun.net.www.content.text
      PlainTextInputStream in = (PlainTextInputStream)u.getContent();
      //Iterate over the InputStream and print it out.
      int c;
      while ((c = in.read()) != -1) { 
        System.out.print((char) c); 
      } 
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

令人惊讶的是一点点思考和无聊会做什么(并且无法跳到仓促的结论(有意志的地方,有办法)。

您可能也可以使用ClassLoader,通过覆盖它,在某些时候Java必须遍历类路径中的所有文件,通过挂钩,您可以打印出它尝试的所有文件加载时不使用任何种类的java.io。*。

经过一些调查后,我认为这不可能很容易,当然不是为了完成家庭作业,除非它是某种RE'ing任务或取证任务。

答案 1 :(得分:7)

您可以使用Runtime.getRuntime().exec()

String[] cmdarray;
if (System.getProperty("os.name").startsWith("Windows")) {
    cmdarray = new String[] { "cmd.exe", "/c", "dir /b" };
} else { // for UNIX-like systems
    cmdarray = new String[] { "ls" };
}

Runtime.getRuntime().exec(cmdarray);

感谢@Geo获取Windows命令。

答案 2 :(得分:1)

您可以使用JNA对底层操作系统进行本机调用。

作为努力工作,这可能是值得的。

答案 3 :(得分:1)

另一种选择是在C中编写OS特定代码并通过JNI访问它。但是又一次。你为什么要这个?