Làm thế nào để có được thư mục làm việc hiện tại trong Java?


1029

Tôi muốn truy cập thư mục làm việc hiện tại của tôi bằng cách sử dụng java.

Mã của tôi :

 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);

Đầu ra:

Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32

Đầu ra của tôi không đúng vì ổ C không phải là thư mục hiện tại của tôi.

Làm thế nào để có được thư mục hiện tại?


2
bạn có thể dán vào đây những gì bạn thấy khi bạn thực thi cdlệnh trên dấu nhắc lệnh của bạn khi bạn thực hiện điều này không?
Nishant

3
Bạn đang cố gắng thực hiện điều gì bằng cách truy cập thư mục làm việc? Nó có thể được thực hiện bằng cách sử dụng đường dẫn lớp thay thế? Ví dụ, nếu bạn cần đọc một tệp văn bản trên hệ thống tệp, bạn có thể tìm thấy nó dễ dàng khi nó nằm trên đường dẫn lớp.
Earldoureb

1
làm sao? Bạn có thể giải thích xin vui lòng?
Đồ họa C

1
Để biết một số thông tin về việc truy cập một tệp trên đường dẫn lớp, hãy xem stackoverflow.com/questions/1464291/iêu
downeyt

7
Đối với mục đích gỡ lỗi, thư mục làm việc có thể hữu ích để biết liệu chương trình dường như không thể truy cập các tệp tồn tại.
nsandersen 17/03/2016

Câu trả lời:


1152
public class JavaApplication {
  public static void main(String[] args) {
       System.out.println("Working Directory = " + System.getProperty("user.dir"));
  }
}

Điều này sẽ in một đường dẫn tuyệt đối hoàn chỉnh từ nơi ứng dụng của bạn được khởi tạo.


Từ tài liệu :

java.iogói giải quyết tên đường dẫn tương đối bằng thư mục người dùng hiện tại. Thư mục hiện tại được biểu diễn dưới dạng thuộc tính hệ thống, nghĩa là user.dirvà là thư mục mà từ đó JVM được gọi.


25
@ubuntudroid: đó là lý do tại sao tôi đề cập cụ thể rằng nó sẽ in đường dẫn từ nơi ứng dụng đã khởi tạo. Tôi đoán trình khởi động luồng trực tiếp chạy jar / chương trình sau khi bắt đầu dấu nhắc commnad (về cơ bản là tại C: \ WINDOWS \ system32). Tôi hy vọng bạn hiểu quan điểm của tôi. Giả sử bạn bị hạ thấp, đánh giá cao rằng ít nhất bạn quan tâm để lại phản hồi. :)
Anuj Patel

1
user.dir sẽ lấy đường dẫn đến thư mục trong đó tiến trình được khởi chạy. Để có được đường dẫn thực tế đến thư mục chính của ứng dụng, hãy xem câu trả lời của tôi dưới đây.
Peter De Mùa đông

1
Tôi có nghĩa là "tất cả các mã dựa vào nó để tìm thư mục hiện tại không thành công." Không phải tất cả các mã nói chung. (Tôi đã chậm để chỉnh sửa nhận xét ban đầu)
SubOptimal 30/12/14

13
@SubOptimal nếu người dùng đã giải quyết -Duser.dir, anh ta có thể chạy nó trong thư mục làm việc tùy chỉnh.
barwnikk

5
@indyaah nguyên vẹn câu trả lời này là sai, có một sự khác biệt tinh tế giữa thư mục người dùng làm việc và thư mục làm việc hiện tại của một quy trình hệ thống (cwd); hầu hết thời gian "user.dir" trỏ đến cwd của một quá trình (java); nhưng "user.dir" có ngữ nghĩa khác nhau và sẽ không được sử dụng để có được cwd của một quá trình java; btw: có nhiều thuộc tính có sẵn cho java process docs.oracle.com/javase/tutorial/essential/en môi / giả chỉ để tham khảo
comeGetSome 30/05/2015

382

Xem: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Sử dụng java.nio.file.Pathjava.nio.file.Paths, bạn có thể thực hiện các thao tác sau để hiển thị những gì Java nghĩ là đường dẫn hiện tại của bạn. Điều này cho 7 và trên, và sử dụng NIO.

Path currentRelativePath = Paths.get("");
String s = currentRelativePath.toAbsolutePath().toString();
System.out.println("Current relative path is: " + s);

Kết quả này Current relative path is: /Users/george/NetBeansProjects/Tutorialstrong trường hợp của tôi là nơi tôi chạy lớp từ đó. Xây dựng các đường dẫn theo cách tương đối, bằng cách không sử dụng dấu phân cách hàng đầu để cho biết bạn đang xây dựng một đường dẫn tuyệt đối, sẽ sử dụng đường dẫn tương đối này làm điểm bắt đầu.


2
Cái đầu tiên chưa được kiểm tra, nhưng cái thứ hai sẽ thực sự có được thư mục nhà của bạn. Không phải thư mục làm việc hiện tại mà ứng dụng đang chạy.
Peter De Mùa đông

12
Xin đừng nhầm lẫn thư mục chính của người dùng ("user.home", / Users / george trong trường hợp của bạn) và thư mục làm việc hiện tại ("user.dir", đây sẽ là thư mục mà bạn đã khởi động JVM cho ứng dụng của mình , vì vậy có thể là một cái gì đó như eg / Users / george / workspace / FooBarProject).
David

1
Tôi thích cách này. Khi tôi cần cha mẹ của thư mục làm việc, nó không hoạt động : Paths.get("").getParent(), nó cung cấp null. Thay vào đó, nó hoạt động : Paths.get("").toAbsolutePath().getParent().
Ole VV

235

Các công việc sau đây trên Java 7 trở lên (xem tài liệu này ở đây ).

import java.nio.file.Paths;

Paths.get(".").toAbsolutePath().normalize().toString();

11
Làm thế nào là tốt hơn so với di động hơn import java.io.File; File(".").getAbsolutePath()?
Evgeni Sergeev

8
Khi bạn nói di động, bạn có nghĩa là nó hoạt động trong Java 6 trở về trước? Paths.get()có thể được coi là tốt hơn ở chỗ nó cho phép truy cập trực tiếp vào Pathgiao diện mạnh hơn .
Ole VV

8
Lợi thế tiềm năng của việc sử dụng .normalize()trong bối cảnh này là gì?
Ole VV

7
@ OleV.V. Từ Javadoc: ( phương pháp bình thường hóa )Returns a path that is this path with redundant name elements eliminated.
Stephan

Sẽ được bình thường hóa trong trường hợp này.
JM Becker ngày

73

Điều này sẽ cung cấp cho bạn đường dẫn của thư mục làm việc hiện tại của bạn:

Path path = FileSystems.getDefault().getPath(".");

Và điều này sẽ cung cấp cho bạn đường dẫn đến một tệp có tên "Foo.txt" trong thư mục làm việc:

Path path = FileSystems.getDefault().getPath("Foo.txt");

Chỉnh sửa: Để có được đường dẫn tuyệt đối của thư mục hiện tại:

Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();

* Cập nhật * Để có được thư mục làm việc hiện tại:

Path path = FileSystems.getDefault().getPath("").toAbsolutePath();

11
cái này chỉ trả về '.' cho tôi.
john ktejik

3
Có, trong nhiều hệ thống sẽ là tham chiếu đến thư mục làm việc. Để có được đường dẫn tuyệt đối, bạn có thể thêm một cuộc gọi phương thức nữaPath path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Đánh dấu

2
Bạn không cần foo.txt, chỉ cần đặt một chuỗi trống để lấy thư mục
john ktejik

1
Trên Windows (10), điều này chỉ cho tôi một Pathđối tượng trỏ đến một tệp được gọi .bên trong thư mục làm việc hiện tại. Sử dụng một chuỗi rỗng, thay vì "."làm việc cho tôi.
Kröw

36

Đây là giải pháp cho tôi

File currentDir = new File("");

1
Điều này có tác dụng phụ khi bạn sử dụng một đối tượng Tệp như là cha mẹ của Tệp khác: Tệp mới (Tệp mới (""), "thư mục con") sẽ không hoạt động như mong đợi
MRalwasser

13
Để khắc phục điều này, sử dụng new File("").getAbsoluteFile()thay thế.
MRalwasser

4
Đối với những gì nó có giá trị, tôi đã có may mắn hơn với Tệp (".").
keshlam

Cách xác định đường dẫn tương đối trong Java Trang này đã giúp tôi. Ngoài ra tôi giả định rằng tôi nên sử dụng /khi tạo một đường dẫn tương đối. Tôi đã sai, đừng bắt đầu với /. ../cũng hoạt động để đi lên trong cây thư mục.
Watersationalkilla

@keshlam Điều đó đã cho tôi một tập tin trong thư mục hiện tại được gọi ..
Kröw

32

Tôi đã tìm thấy giải pháp này trong các bình luận tốt hơn các bình luận khác và dễ mang theo hơn:

String cwd = new File("").getAbsolutePath();

Hoặc thậm chí

String cwd = Paths.get("").toAbsolutePath();

Đây chính xác giống như câu trả lời từ comeGetSome và thực sự là Java <7 way
GoGoris

30

Điều gì khiến bạn nghĩ rằng c: \ windows \ system32 không phải là thư mục hiện tại của bạn? Các user.dirbất động sản là một cách rõ ràng là "thư mục làm việc hiện tại của người sử dụng".

Nói cách khác, trừ khi bạn khởi động Java từ dòng lệnh, c: \ windows \ system32 có thể là CWD của bạn. Đó là, nếu bạn nhấp đúp để bắt đầu chương trình của mình, CWD dường như không phải là thư mục mà bạn đang nhấp đúp từ đó.

Chỉnh sửa : Dường như điều này chỉ đúng với các cửa sổ cũ và / hoặc các phiên bản Java.


2
Điều này dường như không đúng, ít nhất là không phải trên máy Windows 7 của tôi sử dụng Java 7. user.dirluôn là thư mục nơi tôi nhấp đúp vào tệp jar.
Jolta

26

Sử dụng CodeSource#getLocation().

Điều này cũng hoạt động tốt trong các tập tin JAR. Bạn có thể lấy CodeSourcebằng ProtectionDomain#getCodeSource()ProtectionDomainlần lượt có thể thu được bằng cách 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());
    }
}

2
Điều này trả về vị trí của tệp JAR. Không phải những gì đã được yêu cầu.
Hầu tước Lorne

22
this.getClass().getClassLoader().getResource("").getPath()

12
Ném NPE khi tôi khởi chạy ứng dụng của mình từ tệp JAR bằng cách nhấp đúp vào ứng dụng đó.
Matthew Wise

2
Điều này trả về ""nếu ứng dụng đang chạy từ tệp JAR hoặc phần tử CLASSPATH. Không phải những gì đã được yêu cầu.
Hầu tước Lorne

@ Zizouz212 getClass()là một phương thức đối tượng, vì vậy trong bối cảnh tĩnh, chỉ cần loại bỏ thiskhông hoạt động. Bạn phải tham khảo rõ ràng về lớp bạn đang làm MyClass.class.getClassLoader()......
Kröw

Tuy nhiên, nó sẽ không trả về thư mục làm việc ...
Angel O'Sphere

18

nói chung, là một đối tượng Tệp:

File getCwd() {
  return new File("").getAbsoluteFile();
}

bạn có thể muốn có chuỗi đủ điều kiện như "D: / a / b / c" đang làm:

getCwd().getAbsolutePath()

1
Điều này hoạt động tốt trong các thử nghiệm Android vì Android không bao gồm java.nio.file.Files.
iamreptar

Dường như không hoạt động đối với tôi trong ngữ cảnh tĩnh (Tệp mới ("") ném NullPulumException) ..?
nsandersen 17/03/2016

2
@nsandersen có lẽ bạn đã sử dụng một đối tượng Tệp sai: System.out.println (java.io.File (""). getAbsolutePath ());
comeGetSome


5

Trên Linux khi bạn chạy tệp jar từ thiết bị đầu cuối , cả hai tệp này sẽ trả về giống nhau String: "/ home / CurrentUser" , bất kể bạn đang ở đâu trong tệp jar. Nó phụ thuộc vào thư mục hiện tại bạn đang sử dụng với thiết bị đầu cuối của bạn, khi bạn khởi động tệp jar.

Paths.get("").toAbsolutePath().toString();

System.getProperty("user.dir");

Nếu bạn Classvới mainsẽ được gọi MainClass, sau đó thử:

MainClass.class.getProtectionDomain().getCodeSource().getLocation().getFile();

Điều này sẽ trả về một Stringvới đường dẫn tuyệt đối của jar file.


3
Đó không phải là những gì được yêu cầu.
Hầu tước Lorne

5

Sử dụng Windows user.dir trả về thư mục như mong đợi, nhưng KHÔNG khi bạn khởi động ứng dụng của mình với quyền nâng cao (chạy với tư cách quản trị viên), trong trường hợp đó bạn nhận được C: \ WINDOWS \ system32


3

Tôi hy vọng bạn muốn truy cập vào thư mục hiện tại bao gồm cả gói, tức là nếu chương trình Java của bạn đang ở trong c:\myApp\com\foo\src\service\MyTest.javavà bạn muốn in cho đến khi c:\myApp\com\foo\src\serviceđó bạn có thể thử đoạn mã sau:

String myCurrentDir = System.getProperty("user.dir")
            + File.separator
            + System.getProperty("sun.java.command")
                    .substring(0, System.getProperty("sun.java.command").lastIndexOf("."))
                    .replace(".", File.separator);
    System.out.println(myCurrentDir);

Lưu ý: Mã này chỉ được thử nghiệm trong Windows với Oracle JRE.


6
Sẽ là không hài lòng nếu không hạ thấp câu trả lời này. Hãy suy nghĩ kỹ hơn trước khi đăng. Mã của bạn bị hỏng, trừ khi tất cả những điều này là đúng: 1. JRE là của Oracle, nếu không sẽ không có thuộc tính hệ thống "sun.java.command" → NPE; 2. HĐH là Windows (Sử dụng File.separatorthay thế hoặc hàm tạo đa đối số File); 3. đường dẫn lớp được chỉ định cụ thể trên dòng lệnh 'thư mục hiện tại bao gồm gói' (??) là: a. quy định trước, b. quy định tuyệt đối, c. khớp chính xác với CWD (ngay cả với độ nhạy cảm trường hợp của Windows) và d. là hậu duệ của CWD
Michael Scheper

Điều đó giải quyết các điểm 1 và 2. Nhưng trừ khi tôi thiếu thứ gì đó, bạn vẫn dựa vào đường dẫn lớp được chỉ định trong dòng lệnh (nghĩa là không có trong biến môi trường) và cho 'thư mục hiện tại bao gồm cả gói' (I thừa nhận tôi không thực sự hiểu ý của bạn là gì) là hậu duệ của yếu tố đặc biệt đầu tiên trong đường dẫn lớp. Và vấn đề khớp trường hợp vẫn còn. Tôi xin lỗi nếu nhận xét của tôi không hữu ích; Tôi đã hy sinh sự rõ ràng để giữ trong giới hạn nhân vật bình luận.
Michael Scheper

@Inversus, nó chỉ "hoạt động hoàn hảo" trong một số môi trường; bạn chỉ tình cờ đủ may mắn để kiểm tra nó trong một vài người. Viết phần mềm bị lỗi trong môi trường thời gian chạy hợp pháp không phải là cách thực hành tốt, ngay cả khi bộ môi trường kiểm tra của bạn không đủ rộng để bao gồm chúng.
Charles Duffy

@CharlesDuffy Bạn nói đúng, đó không phải là thực hành tốt. May mắn thay, giải pháp này "giải quyết vấn đề cụ thể của tôi" không khiến nó "[thất bại] trong môi trường thời gian chạy hợp pháp." Trên thực tế, nó đã giúp tôi giải quyết một thất bại như vậy và viết mã mạnh mẽ hơn, bên cạnh việc giải quyết vấn đề rất cụ thể mà tôi có (điều này chỉ liên quan đến câu hỏi / câu trả lời này). Tôi đoán tôi chỉ may mắn tìm thấy nó.
Inversus

3

Đề cập rằng nó chỉ được kiểm tra Windowsnhưng tôi nghĩ nó hoạt động hoàn hảo trên các Hệ điều hành khác [ Linux,MacOs,Solaris] :).


Tôi đã có 2 .jar tập tin trong cùng một thư mục. Tôi muốn từ một .jartệp để bắt đầu .jartệp khác trong cùng thư mục.

Vấn đề là khi bạn khởi động nó từ cmdthư mục hiện tại system32.


Cảnh báo!

  • Dưới đây dường như hoạt động khá tốt trong tất cả các thử nghiệm tôi đã thực hiện ngay cả với tên thư mục ;][[;'57f2g34g87-8+9-09!2#@!$%^^&()hoặc ()%&$%^@# nó hoạt động tốt.
  • Tôi đang sử dụng ProcessBuildervới dưới đây như sau:

🍂 ..

//The class from which i called this was the class `Main`
String path = getBasePathForClass(Main.class);
String applicationPath=  new File(path + "application.jar").getAbsolutePath();


System.out.println("Directory Path is : "+applicationPath);

//Your know try catch here
//Mention that sometimes it doesn't work for example with folder `;][[;'57f2g34g87-8+9-09!2#@!$%^^&()` 
ProcessBuilder builder = new ProcessBuilder("java", "-jar", applicationPath);
builder.redirectErrorStream(true);
Process process = builder.start();

//...code

🍂 getBasePathForClass(Class<?> classs):

    /**
     * Returns the absolute path of the current directory in which the given
     * class
     * file is.
     * 
     * @param classs
     * @return The absolute path of the current directory in which the class
     *         file is.
     * @author GOXR3PLUS[StackOverFlow user] + bachden [StackOverFlow user]
     */
    public static final String getBasePathForClass(Class<?> classs) {

        // Local variables
        File file;
        String basePath = "";
        boolean failed = false;

        // Let's give a first try
        try {
            file = new File(classs.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

            if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) {
                basePath = file.getParent();
            } else {
                basePath = file.getPath();
            }
        } catch (URISyntaxException ex) {
            failed = true;
            Logger.getLogger(classs.getName()).log(Level.WARNING,
                    "Cannot firgue out base path for class with way (1): ", ex);
        }

        // The above failed?
        if (failed) {
            try {
                file = new File(classs.getClassLoader().getResource("").toURI().getPath());
                basePath = file.getAbsolutePath();

                // the below is for testing purposes...
                // starts with File.separator?
                // String l = local.replaceFirst("[" + File.separator +
                // "/\\\\]", "")
            } catch (URISyntaxException ex) {
                Logger.getLogger(classs.getName()).log(Level.WARNING,
                        "Cannot firgue out base path for class with way (2): ", ex);
            }
        }

        // fix to run inside eclipse
        if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin")
                || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) {
            basePath = basePath.substring(0, basePath.length() - 4);
        }
        // fix to run inside netbeans
        if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
            basePath = basePath.substring(0, basePath.length() - 14);
        }
        // end fix
        if (!basePath.endsWith(File.separator)) {
            basePath = basePath + File.separator;
        }
        return basePath;
    }

Điều này trả về vị trí của tệp JAR. Không phải những gì đã được yêu cầu.
Hầu tước Lorne

@EJP Vị trí của tệp .jar không phải là thư mục làm việc hiện tại của chương trình java?
GOXR3PLUS

2

Thư mục làm việc hiện tại được định nghĩa khác nhau trong các triển khai Java khác nhau. Đối với phiên bản nhất định trước Java 7, không có cách nhất quán để có được thư mục làm việc. Bạn có thể giải quyết vấn đề này bằng cách khởi chạy tệp Java -Dvà xác định một biến để chứa thông tin

Cái gì đó như

java -D com.mycompany.workingDir="%0"

Điều đó không hoàn toàn đúng, nhưng bạn hiểu ý. Sau đó System.getProperty("com.mycompany.workingDir")...


6
Không liên quan đến câu hỏi.
Peter De Mùa đông

1
Nó có ý nghĩa với Java - đó là vị trí trên đĩa nơi các tệp mà bạn mở với tên đường dẫn tương đối có liên quan đến.
Cướp tôi

2
Vâng, nó có một ý nghĩa. Lời nói của tôi có phần kém được lựa chọn. Nhưng bạn đã bỏ lỡ vấn đề - trước Java 7, không có cách nào để biết thư mục làm việc hiện tại và các triển khai khác nhau đặt chúng ... khác nhau ...
MJB

1

giả sử rằng bạn đang cố gắng chạy dự án của bạn trong nhật thực, hoặc netbean hoặc độc lập với dòng lệnh. Tôi đã viết một phương pháp để sửa nó

public static final String getBasePathForClass(Class<?> clazz) {
    File file;
    try {
        String basePath = null;
        file = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) {
            basePath = file.getParent();
        } else {
            basePath = file.getPath();
        }
        // fix to run inside eclipse
        if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin")
                || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) {
            basePath = basePath.substring(0, basePath.length() - 4);
        }
        // fix to run inside netbean
        if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
            basePath = basePath.substring(0, basePath.length() - 14);
        }
        // end fix
        if (!basePath.endsWith(File.separator)) {
            basePath = basePath + File.separator;
        }
        return basePath;
    } catch (URISyntaxException e) {
        throw new RuntimeException("Cannot firgue out base path for class: " + clazz.getName());
    }
}

Để sử dụng, ở mọi nơi bạn muốn lấy đường dẫn cơ sở để đọc tệp, bạn có thể chuyển lớp neo của mình sang phương thức trên, kết quả có thể là thứ bạn cần: D

Tốt,


2
Điều này trả về vị trí của tệp JAR. Không phải những gì đã được yêu cầu.
Hầu tước Lorne

@ user207421 vâng Tôi biết câu trả lời này không phải là câu trả lời đúng cho câu hỏi, nhưng hầu hết mọi người đều muốn lấy "thư mục chứa các lọ" thay vì "thư mục làm việc dòng lệnh".
bachden

0

Không có câu trả lời được đăng ở đây làm việc cho tôi. Đây là những gì đã làm việc:

java.nio.file.Paths.get(
  getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
);

Chỉnh sửa: Phiên bản cuối cùng trong mã của tôi:

URL myURL = getClass().getProtectionDomain().getCodeSource().getLocation();
java.net.URI myURI = null;
try {
    myURI = myURL.toURI();
} catch (URISyntaxException e1) 
{}
return java.nio.file.Paths.get(myURI).toFile().toString()

Điều này trả về vị trí của tệp JAR. Không phải những gì đã được yêu cầu.
Hầu tước Lorne

0

Đây là viên đạn bạc của tôi khi từng có khoảnh khắc của sự nhầm lẫn bong bóng. (Gọi nó là điều đầu tiên trong chính). Có thể ví dụ JVM được IDE chuyển sang phiên bản khác. Hàm tĩnh này tìm kiếm tiến trình hiện tại PID và mở VisualVM trên pid đó. Sự nhầm lẫn dừng lại ở đó bởi vì bạn muốn tất cả và bạn có được nó ...

  public static void callJVisualVM() {
    System.out.println("USER:DIR!:" + System.getProperty("user.dir"));
    //next search current jdk/jre
    String jre_root = null;
    String start = "vir";
    try {
        java.lang.management.RuntimeMXBean runtime =
                java.lang.management.ManagementFactory.getRuntimeMXBean();
        String jvmName = runtime.getName();
        System.out.println("JVM Name = " + jvmName);
        long pid = Long.valueOf(jvmName.split("@")[0]);
        System.out.println("JVM PID  = " + pid);
        Runtime thisRun = Runtime.getRuntime();
        jre_root = System.getProperty("java.home");
        System.out.println("jre_root:" + jre_root);
        start = jre_root.concat("\\..\\bin\\jvisualvm.exe " + "--openpid " + pid);
        thisRun.exec(start);
    } catch (Exception e) {
        System.getProperties().list(System.out);
        e.printStackTrace();
    }
}


-7

đây là tên thư mục hiện tại

String path="/home/prasad/Desktop/folderName";
File folder = new File(path);
String folderName=folder.getAbsoluteFile().getName();

đây là đường dẫn thư mục hiện tại

String path=folder.getPath();

1
OP muốn các thư mục làm việc hiện tại nơi ứng dụng được chạy từ đó.
Leif Gruenwoldt

Đây là thư mục nhà của bạn , không phải thư mục làm việc hiện tại của bất kỳ ai, ngoại trừ có thể là của bạn. Không phải những gì đã được yêu cầu.
Hầu tước Lorne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.