2015-01-28
使用netbeans創建項目
首先使用netbeans 8創建java項目HelloJava,布局如下:
src 目錄保存著編寫的代碼, build 保存編譯好的class文件、資源文件等。
user.properties 內容如下:
name=root
password=hi
使用絕對路徑讀取
類me.letian.HelloJava內容如下:
package me.letian;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;
public class HelloJava {
public static void main(String[] args) throws IOException {
Properties props = new Properties();
String propsPath = "/home/letian/NetBeansProjects/HelloJava/build/classes/me/letian/user.properties";
try (InputStream in = Files.newInputStream(Paths.get(propsPath))) {
props.load(in);
System.out.println(props.getProperty("name"));
}
}
}
使用netbeans執行該類中的main方法,結果如下:
root
打包成jar文件:在菜單“Run”中選擇“Clean and Build Project”,將會把項目打包成jar并放在項目下的dist目錄下。
$ cd /home/letian/NetBeansProjects/HelloJava/dist/
$ jar tvf HelloJava.jar # 查看jar內容
0 Wed Jan 28 21:01:16 CST 2015 META-INF/
210 Wed Jan 28 21:01:14 CST 2015 META-INF/MANIFEST.MF
0 Wed Jan 28 21:01:16 CST 2015 me/
0 Wed Jan 28 21:01:16 CST 2015 me/letian/
2030 Wed Jan 28 21:01:16 CST 2015 me/letian/HelloJava.class
21 Wed Jan 28 21:01:16 CST 2015 me/letian/user.properties
$ java -jar HelloJava.jar me.letian.HelloJava # 執行
root
使用相對路徑
使用相對路徑,不能簡單的將propsPath設值為 user.properties :
package me.letian;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;
public class HelloJava {
public static void main(String[] args) throws IOException {
Properties props = new Properties();
String propsPath = "user.properties";
System.out.println("" + Paths.get(propsPath).toAbsolutePath()); // 輸出絕對路徑
try (InputStream in = Files.newInputStream(Paths.get(propsPath))) {
props.load(in);
System.out.println(props.getProperty("name"));
}
}
}
使用netbeans執行該類中的main方法,結果如下:
/home/letian/NetBeansProjects/HelloJava/user.properties
Exception in thread "main" java.nio.file.NoSuchFileException: user.properties
......
打包成jar并執行:
$ java -jar HelloJava.jar me.letian.HelloJava
/home/letian/NetBeansProjects/HelloJava/dist/user.properties
Exception in thread "main" java.nio.file.NoSuchFileException: user.properties
......
可以看到,上面的兩種運行方式所輸出的properties文件的絕對路徑都是不存在的。
解決方法很簡單: 將
String propsPath = "user.properties";
替換為
String propsPath = "src/me/letian/user.properties";
無論是使用絕對路徑還是相對路徑,對于jar都是不合適的,最好的方法是以資源文件的形式獲取 user.properties 。
以資源的形式(方法1)
package me.letian;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Properties;
public class HelloJava {
public static void main(String[] args) throws IOException {
Properties props = new Properties();
String propsPath = "me/letian/user.properties";
try (InputStream in = HelloJava.class.getClassLoader().getResourceAsStream("me/letian/user.properties");) {
props.load(in);
System.out.println(props.getProperty("name"));
}
}
}
以資源的形式(方法2)
package me.letian;
import java.io.IOException;
import java.util.ResourceBundle;
public class HelloJava {
public static void main(String[] args) throws IOException {
ResourceBundle rb1 = ResourceBundle.getBundle("me.letian.user");
System.out.println(rb1.getString("name"));
ResourceBundle rb2 = ResourceBundle.getBundle("me/letian/user");
System.out.println(rb2.getString("password"));
}
}
執行結果:
root
hi
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
同时也捎带提醒一句,如果你发现你 hook 系统的方法不起作用的时候,或许可以检查一下你项目里引入的第三方框架里是否也 hook 了和你一样的" alt="从使用 KVO 监听 readonly 属性说起">
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态