您可以在OSX上使用dtrace,但由於它需要root權限,因此它不是您想要放入系統運行時的東西。
在任何情況下,您都無法在純Java中執行此操作(任何Java API都可能是一些較低級C內省的包裝,如果您在內核範圍內執行此操作,則需要以root身份完成)。
如果您只是想跟蹤您的程序何時打開文件(而不是相同系統上的其他文件),那麼您可以安裝自己的安全管理器並實施checkRead()
方法系列,這應該能讓您瞭解當訪問發生時。
import java.io.*;
public class Demo {
public static void main(String args[]) throws Exception {
System.setSecurityManager(new Sniffer());
File f = new File("/tmp/file");
new FileInputStream(f);
}
}
class Sniffer extends SecurityManager {
public void checkRead(String name) {
System.out.println("Opening " + name);
}
}