【Java总结】如何读取Jar包中文件内容
2018-02-23 10:52
639 查看
需求说明
我想利用标准输入流、输出流写文件我想在开发模式下读取Properties文件,想打成可执行Jar包时读取Jar包内的Properties文件
需求分解与实现
1. 标准输入流写文件public static final InputStream in:"标准"输入流。
示例:通过字符缓冲流来获取键盘录入的数据,落入文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; public class TestInputStreamWrite { public static void main(String[] args) { BufferedReader br = null; PrintWriter pw = null; try { br = new BufferedReader(new InputStreamReader(System.in)); pw = new PrintWriter(new BufferedWriter(new FileWriter("./std.in"))); String str = null; while((str=br.readLine())!=null){ if (str.equals("quit")){ System.out.println("谢谢使用!"); break; } pw.println(str); } } catch (IOException e) { e.printStackTrace(); } finally{ try { if (br!=null) br.close(); } catch (IOException e) { e.printStackTrace(); } try { if(pw!=null) pw.close(); } catch (Exception e) { e.printStackTrace(); } } } }
2. 标准输出流写文件
示例:通过打印流PrintStream,格式化写入文件
import java.io.* ; public class PrintDemo02{ public static void main(String arg[]) throws Exception{ PrintStream ps = null ; // 声明打印流对象 // 如果现在是使用FileOuputStream实例化,意味着所有的输出是向文件之中 ps = new PrintStream(new FileOutputStream(new File("d:" + File.separator + "test.txt"))) ; String name = "刘勋" ; // 定义字符串 int age = 23 ; // 定义整数 float score = 990.356f ; // 定义小数 char sex = 'M' ; // 定义字符 ps.printf("姓名:%s;年龄:%d;成绩:%f;性别:%c",name,age,score,sex) ; ps.close() ; } }
PS:还有其他用法,请自行搜索。
3. 如何判断是class文件执行还是jar文件执行
要点是用Class.getResource方法来获取该类文件的位置:
public class Foo { public static void main(String[] args) { System.out.println(Foo.class.getResource("Foo.class")); } }
如果是.class文件启动:
file:/C:/Users/Jon/Test/com/whatever/Foo.class
如果是从jar包启动:
jar:file:/C:/Users/Jon/Test/foo.jar!/com/whatever/Foo.class
所以,这样就简单了:
String filePath = Foo.class.getResource("Foo.class").toString(); // true: jar文件启动 // false: class文件启动 boolean road = filePath.startsWith("jar:file");
4. 如何加载jar包中的Properties文件
要点一:开发调试模式下,使用jdk自带的Properties工具类加载Properties文件
Properties prop = new Properties(); // 获取Properties文件的绝对路径 // getResourec中的参数是相对classpath的位置 String basPath = Foo.class.getClassLoader().getResource("test.properties").getPath().toString(); // 标准输入流 InputStream in = new BufferedInputStream(new FileInputStream(new File(basPath))); prop.load(in);
要点二:打成可执行jar包时,如何加载Properties文件
使用类路径
String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
或者
String jarPath = this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
因为程序已经被打包成jar包,所以getPath()和getFile()在这里的返回值是一样的。都是/xxx/xxx.jar这种形式。如果路径包含Unicode字符,还需要将路径转码。
jarPath = java.net.URLDecoder.decode(jarPath, "UTF-8");
加载特定资源文件
// 路径拼接 URL url = new URL("jar:file" + jarPath + "!/resources/test.properties"); // 标准输入流 InputStream in = url.openStream(); prop.load(in);
至此,完成。仅作记录
相关文章推荐
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
- Java在读取文件内容的时候,如何判断出空白行
- java读取文件内容的方法总结
- Jar中的Java程序如何读取Jar包中的资源文件
- JAVA中读取文件(二进制,字符)内容的方法总结
- java如何读取配置文件中的内容
- java 如何读取jar包外的properties文件(转)
- Java+Selenium3方法篇45-Java中如何读取properties文件内容
- java读取文件内容的方法总结
- [Java]读取文件内容方法总结
- java中jar包内的类访问jar包内部的资源文件路径和获得读取资源文件内容的问题
- java里如何使用输入流和输出流实现读取本地文件里内容和写出到本地文件里
- java读取jar包里文件内容
- JAVA中读取文件(二进制,字符)内容的几种方法总结
- core java ziptest 第12章如何从zip文件或者jar文件中读取数据
- java读取文件内容的方法总结
- java 如何从jar包中读取资源文件
- java 如何读取jar包外的properties文件(转)
- 如何用java读取一个txt 文件内的内容并把它赋值与String里?
- Java如何读取数据文件,如txt文件或者.dat文件 中的内容