1.从classpath读取文件可以避免不同环境下文件路径不一致的问题。

Windows和Linux关于路径的表示不一致

  • Windows:C:\conf\default.properties
  • Linux:/User/admin/conf/default.properties
//先获取getClass(),再通过getResourceAsStream可以获取任意的资源文件
try(InputStream input = getClass().getResourceAsStream("/default.properties")){
if(input != null){
//如果资源文件在classpath未找到,会返回null
}
}
public class Main {
public static void main(String[] args) throws IOException {
String[] data1 = {
"setting.properties",//正确路径
"/com/testList/setting.properties",//正确路径
"/com/setting.properties",//错误路径
"src/main/java/com/setting.properties",//错误路径
};
for(String data:data1){
getProperty(data);
}
String[] data2 = {
"Person.txt",//正确路径
"/com/testList/Person.txt",//正确路径
"/com/List/Person.txt",//错误路径
"/src/main/java/com/testList/Person.txt",//错误路径 };
for(String data:data2){
getText(data);
}
}
static void getProperty(String data) throws IOException{
try(InputStream input = Main.class.getResourceAsStream(data)) {
if(input != null){
System.out.println(data+"文件已读取");
Properties props = new Properties();
props.load(input);
System.out.println("url="+props.getProperty("url"));
System.out.println("name="+props.getProperty("name"));
}else{
System.out.println(data+"文件不存在");
}
}
}
static void getText(String data) throws IOException{
try(InputStream input = Main.class.getResourceAsStream(data)){
if(input != null){
System.out.println(data+"文件已读取");
BufferedReader reader = new BufferedReader(new InputStreamReader(input));//BufferedReader有readline()方法可以读取第一行文本
System.out.println(reader.readLine());
}else{
System.out.println(data+"文件不存在");
}
}
}
}

2.总结

  • 把资源存储在classpath中可以避免文件路径依赖
  • Class对象的getResourceAsStream()可以从classpath读取资源
  • 需要检查返回的InputStream是否为null

廖雪峰Java6 IO编程-2input和output-6classpath资源的更多相关文章

  1. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

  2. 廖雪峰Java6 IO编程-2input和output-7序列化

    1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializ ...

  3. 廖雪峰Java6 IO编程-2input和output-5操作zip

    1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ...

  4. 廖雪峰Java6 IO编程-3Reader和Writer-2Writer

    1.java.io.Writer和java.io.OutputStream的区别 OutputStream Writer 字节流,以byte为单位 字符流,以char为单位 写入字节(0-255):v ...

  5. 廖雪峰Java6 IO编程-3Reader和Writer-1Reader

    1.java.io.Reader和java.io.InputStream的区别 InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0-255): ...

  6. 廖雪峰Java13网络编程-1Socket编程-2TCP编程

    1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...

  7. 廖雪峰Java13网络编程-3其他-1HTTP编程

    1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ...

  8. 廖雪峰Java13网络编程-1Socket编程-5UDP编程

    1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ...

  9. 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

    TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...

随机推荐

  1. spring boot的热加载(hotswap)

    官网上是叫hotswap,有人翻译成热部署,有人翻译成热加载 个人倾向于使用热加载在这个词,和谷歌翻译的热插拔相似. 关于个人理解 http://www.cnblogs.com/ptqueen/p/8 ...

  2. 在 .NET项目中使用 Redis(2018.10.16)

    1. 打开NuGet管理器搜索redis,安装:“StackExchange.Redis” 2. 配置 Web.config 文件 <connectionStrings> <add ...

  3. 斜率优化dp的总结

    放在了我的另一个博客上面 斜率优化dp的总结(多刷新几次才打得开)

  4. ID基本操作(复制页面)(移动页面)(调整跨页页数)(版面调整)5.16

    1.在页面面板中选择要复制的页面.拖动到新建页面图标上就可以新建页面. 2.在页面面板中选择要复制的页面.点击右上角的下箭头选择直接复制跨页. 3.在页面面板中选择要移动的页面.用鼠标拖到要移动的地方 ...

  5. hibernate操作mysql插入修改中文出现乱码

    第一步:mysql的安装目录下配置文件my.ini里面的所有default-character-set改成default-character-set = utf8: 第二部:建立数据库时候字符集选项选

  6. unity中将多张图片进行椭圆运动

    GameObject canvas; ; ; ; ; Dictionary<int,GO> storeItem; GameObject main; public static bool r ...

  7. WindowsForms 调用API

    WindowsForms 后台 using System;using System.Collections.Generic;using System.ComponentModel;using Syst ...

  8. python基础12_匿名_内置函数

    一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...

  9. wc语法

    统计当前目录下的所有文件行数: wc -l * 当前目录以及子目录的所有文件行数: find  . * | xargs wc -l 可以把*改成所要匹配的文件,例如Java文件,*.java这样就只统 ...

  10. Fescar Quick Start

    Quick Start Let's begin with a Microservices example. Use case A business logic for user purchasing ...