Java中加載文件的幾種方式

在Java程序中加載外部文件有多中方式,每種方式也存在區別,本文將理清這些加載方式之間的區別。java

文件IO方式

package org.xialei.example.resource;

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        File file = new File("app.properties");
        System.out.println(file.getAbsolutePath());
    }
}

常見的讀取方式,使用該方式讀取文件時規則以下:segmentfault

若是傳入的是絕對路徑,則以系統根目錄做爲絕對路徑的起點。

若是傳入的是相對路徑,則以當前工做目錄做爲起點。app

本例中,運行java命令的目錄即爲工做目錄,app.properties從工做目錄開始查找。spa

Class.getResourceAsStream

package org.xialei.example.resource;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = Main.class.getResourceAsStream("app.properties")) {
            Properties properties = new Properties();
            properties.load(is);
            System.out.println(properties.getProperty("name"));
        }
    }
}

使用該方式讀取文件時規則以下:code

若是傳入的是相對路徑,則以當前class所在的包做爲起點。

若是傳入的是絕對路徑,則以classpath的根目錄爲起點。get

  • Main.class.getResourceAsStream("app.properties") 會讀取/org/xialei/example/resource/app.properties文件。
  • Main.class.getResourceAsStream("/app.properties")會讀取"classpath:/app.properties"文件

ClassLoader.getResourceAsStream

package org.xialei.example.resource;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws IOException {
        try (InputStream is = Main.class.getClassLoader().getResourceAsStream("org/xialei/example/resource/app.properties")) {
            Properties properties = new Properties();
            properties.load(is);
            System.out.println(properties.getProperty("name"));
        }
    }
}

使用該方式時規則以下:it

使用classpath根目錄做爲起點。

本例中,org/xialei/example/resource/app.properties就是從classpath根目錄進行查找的。io

0.jpeg

相關文章
相關標籤/搜索