给出一个资源路径,然后获取资源文件的信息,可以说是非常常见的一种需求场景了,当然划分一下,本文针对最常见的三种状况进行分析

  • 网络地址
  • 本地绝对路径
  • 本地相对路径

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根据路径获取文件内容的三种场景分析相关推荐

  1. Java实现监听文件变化的三种方法,推荐第三种

    背景 在研究规则引擎时,如果规则以文件的形式存储,那么就需要监听指定的目录或文件来感知规则是否变化,进而进行加载.当然,在其他业务场景下,比如想实现配置文件的动态加载.日志文件的监听.FTP文件变动监 ...

  2. php读取文件内容不全,php读取文件内容的三种方法

    //**************第一种读取方式***************************** 代码如下: header("content-type:text/html;chars ...

  3. python一次性读取整个文件-python逐行读取文件内容的三种方法

    一.使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. 二.需要导入import os 三.下面是逐行读取文件内容的三种方法: ...

  4. Linux清空文件内容的三种方法

    Linux清空文件内容的三种方法 测试文件:a.txt 第一种: $> a.txt 第二种: $echo "" > a.txt 第三种: $cat /dev/null ...

  5. linux系统中清空文件内容的三种方法

    1.使用vi/vim命令打开文件后,输入"%d"清空,后保存即可.但当文件内容较大时,处理较慢,命令如下: vim file_name :%d :wq 2.使用cat命令情况,命令 ...

  6. java持久层用文件_JAVA中用三种方法将字符串持久化到文件中

    经常需要将数据进行持久化,而我们的文件系统是最古老也是最可靠的保存方式.这里就给出一个在JAVA中把字符串保存到文件中的例子.如下: package test.base; import java.io ...

  7. linux下批量替换文件内容的三种办法

    http://www.51testing.com/html/93/316693-815340.html 程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以 ...

  8. java 文件追加文本_Java追加文件内容的三种方法

    importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.FileWri ...

  9. python逐行读取文件内容的三种方法

    方法一: f = open("foo.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 while line: p ...

最新文章

  1. docker 安装使用 mysql
  2. 开发日记-20190424 关键词 阶段性开发心得和小结
  3. 堆栈向下增长和向上增长的理解
  4. SAP UI5 workthrough 12 sap.m.shell
  5. freemarker java类_在freemarker使用java类方法
  6. 在Django将已有数据库生成models文件
  7. 科技行业的起步时代已结束
  8. mysql之批量删除
  9. ICLR'22 | 审稿结果统计速览
  10. python 浮点数精确运算解决方案
  11. 传染病模型SIS及相应的matlab代码
  12. ele-calendar 日历插件使用
  13. eNSP——通过Stelnet登录系统网络配置实验
  14. 小学5年级奥数分数应用题及答案
  15. mysql_assoc函数_PHP:MySQL函数mysql_fetch_assoc()的用法
  16. ANSYS经典界面保存高清图片方法(用于科研绘图)
  17. ffmpeg运行在服务器上,如何在脱离流媒体服务器的时候使用ffmpeg 监测.m3u8直播视频流的状态?...
  18. 职场不可不知的六大潜规则
  19. Verilog实现按键计数器
  20. 初中数学几何问题知识思维导图汇总版

热门文章

  1. 如何做好一位合格qc_如何成为一名合格优秀的QC,你合格吗?
  2. Java long传到前台精度损失解决方案
  3. springboot08 自动配置原理
  4. css关闭窗口按钮的代码,JS+CSS实现带关闭按钮DIV弹出窗口的方法
  5. 在布局空间标注的尺寸量不对_CAD解决布局标注尺寸不对问题 及快捷键混乱问题...
  6. 基因突变PHP6,基因突变中那些“披着狼皮的羊” 很多“致命性”基因突变正在被证实无害...
  7. 删除mysql指令_MySQL常用命令学习笔记
  8. mysql死锁检测算法_MySQL InnoDB如何应付死锁
  9. java webpack web项目_vue+webpack项目搭建
  10. arrays中copyof复制两个数组_Java教程分享之数组知识梳理