2009-10-15 20 views
2

如何在不使用java.io的情況下在當前目錄中列出文件和目錄*?使用Java在Java中列出文件而不使用java.io

+1

爲什麼你不想使用'java.io. *'? – 2009-10-15 11:40:06

+3

也許是功課的要求? – vpram86 2009-10-15 11:40:48

+4

如何在不使用Java的情況下在Java中執行某些操作?爲什麼? – jarnbjo 2009-10-15 11:40:55

回答

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命令。

+4

'dir'也可以在大多數Linux系統上運行。 – guerda 2009-10-15 11:43:54

+0

你應該修改它直接使用shell。您將無法直接在Windows上執行dir,因爲它是內置的shell。運行時調用應該是這樣的:'Runtime.getRuntime()。exec(new String [] {「cmd.exe」,「/ c」,「dir」})' – Geo 2009-10-15 12:18:27

+0

@Geo:謝謝你的信息。我編輯了我的答案。 – 2009-10-15 21:08:58

1

您可以使用JNA對底層操作系統進行本機調用。

作爲一項辛勤工作,它可能是一件值得一看的事情。

1

另一種選擇是在C中編寫特定於OS的代碼並通過JNI訪問它。但是再次。你爲什麼要這樣?

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任務或取證任務。

+0

哇!太棒了! +1 – vpram86 2009-10-15 12:17:43

+2

很高興看到類加載器解決方案:D – Geo 2009-10-15 12:52:53

相關問題