簡體   English   中英

從批處理文件運行Java時,如何獲取Java項目中文件的路徑?

[英]How to get the path of a file in my java project when running java from batch file?

我有一個在Windows上運行的Java 8應用程序。 我想在Java項目中找到文件而不使用絕對路徑。 當我從命令提示符運行應用程序時,以下代碼有效: System.getProperty("user.dir") 但是,當我從批處理文件運行Java應用程序時,此代碼返回該批處理文件的路徑,該路徑與Java應用程序的路徑不同。

如何獲取Java項目中某個文件夾中的abc.txt文件的路徑?

System.getProperty(“ user.dir”)為您提供了正確的目錄,因為您的應用程序是在批處理文件中啟動的。 這就是它的工作方式。

您始終可以使用ClassLoader將文件加載到應用程序中。

假設您已將abc.txt放入項目文件夾中。 實際上,如果您在代碼中的某處使用它作為資源文件,則應將其放在項目的src / resources文件夾中。 然后在您的代碼中,執行以下操作:

   File file = new File(getClass().getResource("abc.txt").getFile());

無論您從哪里啟動應用程序,都可以通過該文件訪問文件。

看一下有關使用ClassLoader的文章,將有助於您更好地了解如何在Java中加載資源。

更新

這是我在Eclipse中的項目 ,abc.txt位於src文件夾下,該文件夾位於類路徑中。

MyClass.java僅包含以下代碼:

    public class MyClass {
        public static void main(String[] args) {
            System.out.println("s: " + MyClass.class.getClassLoader().getResource("abc.txt").getFile());
        }
    }

我遇到了同樣的問題,在搜索了很多東西后發現的唯一解決方法是,將啟動程序批處理文件放在與Java應用程序相同的路徑中,然后生成批處理的快捷方式,這就是我可以將其放置在其他文件夾中的任何位置的原因。 ...

之后,Java運行良好...

假設您基本上希望在代碼中包含相對路徑,則可以使用以下函數獲取源目錄,然后使用源代碼路徑中文件的相對位置獲取任何文件。

public static String getMySourcePath() {
        URL location = <Your class>.class.getProtectionDomain().getCodeSource()
                .getLocation();
        String srcPath = location.toString().replace("file:/", "")
                .replace("bin", "src");
        return srcPath;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM