今天碰到了一個加載文件的相對路徑問題,異常如下:
目錄結構:
讀取文件的代碼如下:
public void load(String path) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(path));
String line = "";
while ((line = br.readLine()) != null) {
m_tbl.put(Integer.parseInt(line), true);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
正斜槓,反斜槓,正反雙斜槓,還有加上上一級目錄我都試過。。。最後運行出來的都是一個反斜槓,實在是傷腦筋,而且這段代碼在 eclipse 下運行沒問題,我拷貝到 idea 下的 resources 文件夾下了就報異常。
後來研究之後得出下面兩種解決方案:
1、採用絕對路徑;
2、還是使用相對路徑,這時用類加載器加載文件路徑。代碼如下:
public void load(String path) {
BufferedReader br = null;
try {
InputStream in = SetTable.class.getClassLoader().getResourceAsStream(path);
br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line = "";
while ((line = br.readLine()) != null) {
m_tbl.put(Integer.parseInt(line), true);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
InputStreamReader 相比於 FileReader 還有一個優勢是可以設置編碼。