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. xml字符串,xml对象,数组之间的相互转化

    <?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller { pu ...

  2. mvn dependency:tree的用法

    一.参考文档 https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-t ...

  3. ID基本操作(在框架内处理文本)5.28

    1.可以直接拖入文档,word,excel,rtf,还可以选中文字,导出文本. 2. 批量把一段文字改为另一段. 还可以改特殊符号.定义范围 . 建立文字后鼠标右键,选择文本框架选项 直接拖动文本框架 ...

  4. sql存储过程编程带事务

    CREATE PROCEDURE [dbo].[存储过程名字] @错误参数_ErrorCode int output, @参数1 int, @参数2 varchar(20), @参数3 varchar ...

  5. 【Java集合系列】目录

    2017-07-29 13:49:40 一.Collection的全局继承关系 二.系列文章 [Java集合系列一]ArrayList解析 备注: 1.ArrayList本质上就是一个数组,所有对外提 ...

  6. 原生js小球运动

    //html代码 <input type="button" value="小球运动" /> <div></div> //js ...

  7. mysql8.0.13 的docker镜像安装

    1.从docker中获取mysql8.0.13镜像 docker pull mysql:8.0.13通过 docker images 命令查看镜像是否获取到了 2.运行 mysql8.0.13 镜像 ...

  8. webView 获取内容高度不准确的原因是因为你设置了某个属性

    不管是UIWebView 还是 WKWebView 这里 获取js属性 获取高度的方法 我就不一一细说了 ,本文最主要不说这个 ,网上有太多的方法 我最不摘几个 CGFloat webViewHeig ...

  9. contos防爆力破解密码

    最近看了一篇文章ssh的爆力破解所以自己就做了一下防爆力破解denyhost 下载denyhost的软件包并上传的服务器下载地址https://sourceforge.net/projects/den ...

  10. git教程: 创建版本库

    转载:创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻 ...