ใช้CodeSource#getLocation()
. ซึ่งใช้งานได้ดีในไฟล์ JAR เช่นกัน คุณสามารถขอรับCodeSource
โดยProtectionDomain#getCodeSource()
และในที่สุดก็สามารถรับได้โดยProtectionDomain
Class#getProtectionDomain()
public class Test {
public static void main(String... args) throws Exception {
URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getFile());
}
}
อัปเดตตามความคิดเห็นของ OP:
ฉันต้องการถ่ายโอนไฟล์ CSV จำนวนมากในโฟลเดอร์ให้โปรแกรมจดจำไฟล์ทั้งหมดจากนั้นโหลดข้อมูลและจัดการไฟล์เหล่านั้น ฉันแค่อยากรู้วิธีไปที่โฟลเดอร์นั้นจริงๆ
ซึ่งจะต้องมีการเข้ารหัส / รู้เส้นทางสัมพัทธ์ในโปรแกรมของคุณ ลองพิจารณาเพิ่มเส้นทางไปยัง classpath เพื่อให้คุณสามารถใช้ClassLoader#getResource()
File classpathRoot = new File(classLoader.getResource("").getPath());
File[] csvFiles = classpathRoot.listFiles(new FilenameFilter() {
@Override public boolean accept(File dir, String name) {
return name.endsWith(".csv");
}
});
หรือเพื่อส่งผ่านเส้นทางเป็นmain()
อาร์กิวเมนต์