廖雪峰Java6 IO编程-2input和output-6classpath资源
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资源的更多相关文章
- 廖雪峰Java6 IO编程-2input和output-4Filter模式
		1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ... 
- 廖雪峰Java6 IO编程-2input和output-7序列化
		1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializ ... 
- 廖雪峰Java6 IO编程-2input和output-5操作zip
		1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInput ... 
- 廖雪峰Java6 IO编程-3Reader和Writer-2Writer
		1.java.io.Writer和java.io.OutputStream的区别 OutputStream Writer 字节流,以byte为单位 字符流,以char为单位 写入字节(0-255):v ... 
- 廖雪峰Java6 IO编程-3Reader和Writer-1Reader
		1.java.io.Reader和java.io.InputStream的区别 InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0-255): ... 
- 廖雪峰Java13网络编程-1Socket编程-2TCP编程
		1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ... 
- 廖雪峰Java13网络编程-3其他-1HTTP编程
		1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ... 
- 廖雪峰Java13网络编程-1Socket编程-5UDP编程
		1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ... 
- 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程
		TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ... 
随机推荐
- spring boot的热加载(hotswap)
			官网上是叫hotswap,有人翻译成热部署,有人翻译成热加载 个人倾向于使用热加载在这个词,和谷歌翻译的热插拔相似. 关于个人理解 http://www.cnblogs.com/ptqueen/p/8 ... 
- 在 .NET项目中使用 Redis(2018.10.16)
			1. 打开NuGet管理器搜索redis,安装:“StackExchange.Redis” 2. 配置 Web.config 文件 <connectionStrings> <add ... 
- 斜率优化dp的总结
			放在了我的另一个博客上面 斜率优化dp的总结(多刷新几次才打得开) 
- ID基本操作(复制页面)(移动页面)(调整跨页页数)(版面调整)5.16
			1.在页面面板中选择要复制的页面.拖动到新建页面图标上就可以新建页面. 2.在页面面板中选择要复制的页面.点击右上角的下箭头选择直接复制跨页. 3.在页面面板中选择要移动的页面.用鼠标拖到要移动的地方 ... 
- hibernate操作mysql插入修改中文出现乱码
			第一步:mysql的安装目录下配置文件my.ini里面的所有default-character-set改成default-character-set = utf8: 第二部:建立数据库时候字符集选项选 
- unity中将多张图片进行椭圆运动
			GameObject canvas; ; ; ; ; Dictionary<int,GO> storeItem; GameObject main; public static bool r ... 
- WindowsForms 调用API
			WindowsForms 后台 using System;using System.Collections.Generic;using System.ComponentModel;using Syst ... 
- python基础12_匿名_内置函数
			一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ... 
- wc语法
			统计当前目录下的所有文件行数: wc -l * 当前目录以及子目录的所有文件行数: find . * | xargs wc -l 可以把*改成所要匹配的文件,例如Java文件,*.java这样就只统 ... 
- Fescar Quick Start
			Quick Start Let's begin with a Microservices example. Use case A business logic for user purchasing ... 
