Saya ingin mengakses direktori kerja saya saat ini menggunakan java.
Kode saya:
String current = new java.io.File( "." ).getCanonicalPath();
System.out.println("Current dir:"+current);
String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);
Keluaran:
Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32
Output saya tidak benar karena drive C bukan direktori saya saat ini.
Bagaimana cara mendapatkan direktori saat ini?
cd
perintah pada command-prompt Anda ketika Anda menjalankan ini?Jawaban:
Ini akan mencetak jalur absolut lengkap dari tempat aplikasi Anda diinisialisasi.
Dari dokumentasi :
java.io
paket menyelesaikan nama path relatif menggunakan direktori pengguna saat ini. Direktori saat ini direpresentasikan sebagai properti sistem, yaitu,user.dir
dan merupakan direktori dari mana JVM dipanggil.sumber
Lihat: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
Menggunakan
java.nio.file.Path
danjava.nio.file.Paths
, Anda dapat melakukan hal berikut untuk menunjukkan apa yang menurut Java adalah jalur Anda saat ini. Ini untuk 7 dan seterusnya, dan menggunakan NIO.Ini menghasilkan
Current relative path is: /Users/george/NetBeansProjects/Tutorials
bahwa dalam kasus saya adalah tempat saya menjalankan kelas. Membangun jalur secara relatif, dengan tidak menggunakan pemisah yang mengarah untuk menunjukkan Anda membangun jalur absolut, akan menggunakan jalur relatif ini sebagai titik awal.sumber
Paths.get("").getParent()
:, ia memberikannull
. Sebaliknya ini bekerja:Paths.get("").toAbsolutePath().getParent()
.Berikut ini berfungsi pada Java 7 dan lebih tinggi (lihat di sini untuk dokumentasi).
sumber
import java.io.File; File(".").getAbsolutePath()
?Paths.get()
dapat dianggap lebih baik karena memberikan akses langsung kePath
antarmuka yang lebih kuat ..normalize()
dalam konteks ini?Returns a path that is this path with redundant name elements eliminated.
Ini akan memberi Anda jalur direktori kerja Anda saat ini:
Dan ini akan memberi Anda path ke file bernama "Foo.txt" di direktori kerja:
Sunting: Untuk mendapatkan jalur absolut dari direktori saat ini:
* Perbarui * Untuk mendapatkan direktori kerja saat ini:
sumber
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Path
objek menunjuk ke file yang disebut.
di dalam direktori kerja saat ini. Menggunakan string kosong, daripada"."
bekerja untuk saya.Ini solusi untuk saya
sumber
new File("").getAbsoluteFile()
saja./
ketika membuat jalur relatif. Saya salah, jangan mulai dengan/
.../
juga berfungsi untuk naik di pohon direktori..
.Saya telah menemukan solusi ini di komentar yang lebih baik daripada yang lain dan lebih portabel:
Atau bahkan
sumber
Apa yang membuat Anda berpikir bahwa c: \ windows \ system32 bukan direktori Anda saat ini? The
user.dir
properti secara eksplisit untuk menjadi "direktori kerja saat ini Pengguna".Dengan kata lain, kecuali Anda memulai Java dari baris perintah, c: \ windows \ system32 mungkin adalah CWD Anda. Artinya, jika Anda mengklik dua kali untuk memulai program Anda, CWD tidak akan menjadi direktori tempat Anda mengklik ganda.
Sunting : Tampaknya ini hanya berlaku untuk windows lama dan / atau versi Java.
sumber
user.dir
secara konsisten folder tempat saya mengklik dua kali file jar.Gunakan
CodeSource#getLocation()
.Ini berfungsi dengan baik dalam file JAR juga. Anda dapat memperoleh
CodeSource
padaProtectionDomain#getCodeSource()
danProtectionDomain
pada gilirannya dapat diperoleh olehClass#getProtectionDomain()
.sumber
sumber
""
jika aplikasi dijalankan dari file JAR, atau elemen CLASSPATH. Bukan apa yang diminta.getClass()
adalah metode objek, jadi dalam konteks statis hanya menghapusthis
tidak berfungsi. Anda harus secara eksplisit merujuk kelas yang Anda ikutiMyClass.class.getClassLoader().....
.umumnya, sebagai objek File:
Anda mungkin ingin memiliki string yang memenuhi syarat penuh seperti "D: / a / b / c" melakukan:
sumber
Saya menggunakan Linux dan mendapatkan hasil yang sama untuk kedua pendekatan ini:
Paths.get("")
docsSystem.getProperty("user.dir")
docssumber
Di Linux ketika Anda menjalankan file jar dari terminal , keduanya akan mengembalikan yang sama
String
: "/ home / CurrentUser" , tidak masalah, di mana file jar Anda. Itu tergantung hanya pada direktori apa yang Anda gunakan dengan terminal Anda, ketika Anda memulai file jar.Jika
Class
dengan Andamain
akan dipanggilMainClass
, cobalah:Ini akan mengembalikan
String
dengan path absolut dari jar berkas.sumber
Menggunakan Windows user.dir mengembalikan direktori seperti yang diharapkan, tetapi BUKAN ketika Anda memulai aplikasi Anda dengan hak tinggi (dijalankan sebagai admin), dalam hal ini Anda mendapatkan C: \ WINDOWS \ system32
sumber
Saya harap Anda ingin mengakses direktori saat ini termasuk paket yaitu Jika program Java Anda ada
c:\myApp\com\foo\src\service\MyTest.java
dan Anda ingin mencetak hinggac:\myApp\com\foo\src\service
Anda dapat mencoba kode berikut:Catatan: Kode ini hanya diuji pada Windows dengan Oracle JRE.
sumber
File.separator
Sebagai gantinya, gunakanFile
konstruktor multi-argumen ); 3. classpath dikhususkan pada baris perintah, dan 'direktori saat ini termasuk paket' (??) adalah: a. ditentukan terlebih dahulu, b. ditentukan sepenuhnya, c. cocok dengan CWD persis (bahkan dengan ketidakpekaan huruf besar Windows), dan d. adalah keturunan CWDSebutkan bahwa itu hanya dicek
Windows
tetapi saya pikir ini berfungsi sempurna pada Sistem Operasi lain [Linux,MacOs,Solaris
] :).Saya memiliki 2
.jar
file di direktori yang sama. Saya ingin dari satu.jar
file untuk memulai.jar
file lain yang ada di direktori yang sama.Masalahnya adalah ketika Anda memulainya dari
cmd
direktori saat inisystem32
.;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
atau()%&$%^@#
berfungsi dengan baik.ProcessBuilder
dengan di bawah ini sebagai berikut:🍂 ..
🍂
getBasePathForClass(Class<?> classs)
:sumber
Direktori kerja saat ini didefinisikan secara berbeda dalam implementasi Java yang berbeda. Untuk versi tertentu sebelum Java 7 tidak ada cara yang konsisten untuk mendapatkan direktori kerja. Anda dapat mengatasi ini dengan meluncurkan file Java dengan
-D
dan mendefinisikan variabel untuk menyimpan infoSesuatu seperti
Itu tidak benar, tetapi Anda mendapatkan idenya. Lalu
System.getProperty("com.mycompany.workingDir")
...sumber
berasumsi bahwa Anda sedang mencoba menjalankan proyek Anda di dalam gerhana, atau netbean atau berdiri sendiri dari baris perintah. Saya telah menulis metode untuk memperbaikinya
Untuk digunakan, di mana pun Anda ingin mendapatkan path dasar untuk membaca file, Anda dapat meneruskan kelas anchor Anda ke metode di atas, hasilnya mungkin hal yang Anda butuhkan: D
Terbaik,
sumber
Tidak ada jawaban yang diposting di sini yang berfungsi untuk saya. Inilah yang berhasil:
Edit: Versi terakhir dalam kode saya:
sumber
Ini adalah peluru perak saya ketika saat kebingungan meletus. (Sebut saja sebagai hal utama di utama). Mungkin misalnya JVM diselipkan ke versi yang berbeda oleh IDE. Fungsi statis ini mencari PID proses saat ini dan membuka VisualVM pada pid itu. Kebingungan berhenti di sana karena Anda menginginkan semuanya dan Anda mendapatkannya ...
sumber
System.getProperty("java.class.path")
sumber
ini adalah nama direktori saat ini
ini adalah jalur direktori saat ini
sumber