Java根据路径获取文件内容的三种场景分析
给出一个资源路径,然后获取资源文件的信息,可以说是非常常见的一种需求场景了,当然划分一下,本文针对最常见的三种状况进行分析
- 网络地址
- 本地绝对路径
- 本地相对路径
I. 实现
1. 思路
http or no-http
给出一个String表示资源文件的标识,如何判断是网络的文件还是本地的文件?
- http开头的看成是网络文件
- 否则看做是本地文件
abs or relaitve
对于mac和linux系统而言,就比较简单了
- 以 "/" 和 "~" 开头的表示绝对路径
- 其他的看做是相对路径
对于windows系统而言,绝对路径形如 "c:\test.txt"
- 路径中包含 ":" 看成是绝对路径 (文件名中能否有:?)
- 以 "" 开头看做是绝对路径
2. 实现
操作系统判断
/*** 是否windows系统*/
public static boolean isWinOS() {boolean isWinOS = false;try {String osName = System.getProperty("os.name").toLowerCase();String sharpOsName = osName.replaceAll("windows", "{windows}").replaceAll("^win([^a-z])", "{windows}$1").replaceAll("([^a-z])win([^a-z])", "$1{windows}$2");isWinOS = sharpOsName.contains("{windows}");} catch (Exception e) {e.printStackTrace();}return isWinOS;
}
复制代码
绝对路径与否判断
public static boolean isAbsFile(String fileName) {if (OSUtil.isWinOS()) {// windows 操作系统时,绝对地址形如 c:\descktopreturn fileName.contains(":") || fileName.startsWith("\\");} else {// mac or linuxreturn fileName.startsWith("/");}
}/*** 将用户目录下地址~/xxx 转换为绝对地址** @param path* @return*/
public static String parseHomeDir2AbsDir(String path) {String homeDir = System.getProperties().getProperty("user.home");return StringUtils.replace(path, "~", homeDir);
}
复制代码
文件获取封装类
public static InputStream getStreamByFileName(String fileName) throws IOException {if (fileName == null) {throw new IllegalArgumentException("fileName should not be null!");}if (fileName.startsWith("http")) {// 网络地址return HttpUtil.downFile(fileName);} else if (BasicFileUtil.isAbsFile(fileName)) {// 绝对路径Path path = Paths.get(fileName);return Files.newInputStream(path);} else if (fileName.startsWith("~")) {// 用户目录下的绝对路径文件fileName = BasicFileUtil.parseHomeDir2AbsDir(fileName);return Files.newInputStream(Paths.get(fileName));} else { // 相对路径return FileReadUtil.class.getClassLoader().getResourceAsStream(fileName);}
}
复制代码
3. 说明
木有window操作系统,因此mac和linux已测试,window环境下是否ok,有待验证
II. 其他
1. 一灰灰Blog: liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog
知识星球
Java根据路径获取文件内容的三种场景分析相关推荐
- Java实现监听文件变化的三种方法,推荐第三种
背景 在研究规则引擎时,如果规则以文件的形式存储,那么就需要监听指定的目录或文件来感知规则是否变化,进而进行加载.当然,在其他业务场景下,比如想实现配置文件的动态加载.日志文件的监听.FTP文件变动监 ...
- php读取文件内容不全,php读取文件内容的三种方法
//**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...
- python一次性读取整个文件-python逐行读取文件内容的三种方法
一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...
- Linux清空文件内容的三种方法
Linux清空文件内容的三种方法 测试文件:a.txt 第一种: $> a.txt 第二种: $echo "" > a.txt 第三种: $cat /dev/null ...
- linux系统中清空文件内容的三种方法
1.使用vi/vim命令打开文件后,输入"%d"清空,后保存即可.但当文件内容较大时,处理较慢,命令如下: vim file_name :%d :wq 2.使用cat命令情况,命令 ...
- java持久层用文件_JAVA中用三种方法将字符串持久化到文件中
经常需要将数据进行持久化,而我们的文件系统是最古老也是最可靠的保存方式.这里就给出一个在JAVA中把字符串保存到文件中的例子.如下: package test.base; import java.io ...
- linux下批量替换文件内容的三种办法
http://www.51testing.com/html/93/316693-815340.html 程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以 ...
- java 文件追加文本_Java追加文件内容的三种方法
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.FileWri ...
- python逐行读取文件内容的三种方法
方法一: f = open("foo.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 while line: p ...
最新文章
- docker 安装使用 mysql
- 开发日记-20190424 关键词 阶段性开发心得和小结
- 堆栈向下增长和向上增长的理解
- SAP UI5 workthrough 12 sap.m.shell
- freemarker java类_在freemarker使用java类方法
- 在Django将已有数据库生成models文件
- 科技行业的起步时代已结束
- mysql之批量删除
- ICLR'22 | 审稿结果统计速览
- python 浮点数精确运算解决方案
- 传染病模型SIS及相应的matlab代码
- ele-calendar 日历插件使用
- eNSP——通过Stelnet登录系统网络配置实验
- 小学5年级奥数分数应用题及答案
- mysql_assoc函数_PHP:MySQL函数mysql_fetch_assoc()的用法
- ANSYS经典界面保存高清图片方法(用于科研绘图)
- ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
- 职场不可不知的六大潜规则
- Verilog实现按键计数器
- 初中数学几何问题知识思维导图汇总版
热门文章
- 如何做好一位合格qc_如何成为一名合格优秀的QC,你合格吗?
- Java long传到前台精度损失解决方案
- springboot08 自动配置原理
- css关闭窗口按钮的代码,JS+CSS实现带关闭按钮DIV弹出窗口的方法
- 在布局空间标注的尺寸量不对_CAD解决布局标注尺寸不对问题 及快捷键混乱问题...
- 基因突变PHP6,基因突变中那些“披着狼皮的羊” 很多“致命性”基因突变正在被证实无害...
- 删除mysql指令_MySQL常用命令学习笔记
- mysql死锁检测算法_MySQL InnoDB如何应付死锁
- java webpack web项目_vue+webpack项目搭建
- arrays中copyof复制两个数组_Java教程分享之数组知识梳理