前言
今天帮畅宝检查Java,发现几个MacOS的文件转到Windows下IntellJ的几个问题。
遂记录一下。
正文
1. Project 里面没有src和bin
刚开始打开文件的时候,很奇怪,只有红框里面的文件,什么src,bin文件夹都是没有的。
于是乎想了半天检查到底是什么问题,发现是文件夹里里面的.DS_Store
文件过多了,(因为在删除了全部的.DS_Store
文件之后,Intell J可以的Project里面终于显示了src和bin了,可能之间的交互存在一些BUG。)
关于.DS_Store
,参考来自《Mac 上的 .DS_Store 究竟是什么文件?如何删除?》:DS_Store,英文全称是 Desktop Services Store(桌面服务存储),开头的 DS 是 Desktop Services(桌面服务) 的缩写。它是一种由macOS系统自动创建的隐藏文件,存在于每一个用「访达」打开过的文件夹下面。DS_Store 文件的主要作用,是存储当前文件夹在桌面显示相关方面的一些自定义属性,包括文件图标的位置、文件夹上次打开时窗口的大小、展现形式和位置等。这有助于保留为特定文件夹配置的设置,例如,将桌面文件夹设置为查看按名称排序的图标,同时将下载文件夹配置为将文件显示为列表并按日期排序,最近修改的先显示。
2. Eclipse的class path配置错误
出于某种未知原因,Intell J无法正确识别并且配置项目,这一步还比较简单,自己对src文件夹按下快捷键SHIFT + CTRL + A
输入 Mark directory as ...
然后选择root就可以了,注意要选择unmarked root,generated root显示是无法更改的,(这两种随时都可以互相转换)。
然后Edit Configuration进行配置
3. config.properties (系统找不到指定的路径。)
然后一切配置好之后,发现系统一直报错,报错原因是... config.properties (系统找不到指定的路径。)
,发现给的报错路径是一个我见都没见过的路径,思索半天,网上也找不到答案,但是突然看到一篇关于getResourceAsStream用法的描述(参考来自《Java中getResourceAsStream的用法》),中写的默认则是从ClassPath根下获取
,遂想到,可能是classpath没有正确配置,于是打开File | Project Settings | Compiler output
,里面显示的就是那个我见都没见过的路径,将路径改为project下的bin
文件夹。
成功。
4. Java中getResourceAsStream的用法
BTW,其实《Java中getResourceAsStream的用法》,这篇文章写的很好,于是搬过来一下,是关于不同函数路径读取的问题,只能说Standardardization的问题了这个,一个破函数要注意这么多的路径读取问题。
4.1 类型
首先,Java中的getResourceAsStream有以下几种:
Class.getResourceAsStream(String path)
: path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。Class.getClassLoader.getResourceAsStream(String path)
:默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。ServletContext. getResourceAsStream(String path)
:默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。- Jsp下的application内置对象就是上面的ServletContext的一种实现。
4.2 用法
其次,getResourceAsStream 用法大致有以下几种:
- 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml。那么,应该有此代码:
me.class.getResourceAsStream("myfile.xml");
- 在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml。那么,应该有此代码:
me.class.getResourceAsStream("file/myfile.xml");
- 不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml。那么,应该有此代码:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
总结一下,可能只是两种写法
- 前面有 “ / ” (“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject ):
me.class.getResourceAsStream("/com/x/file/myfile.xml");
- 前面没有 “ / ” (代表当前类的目录) :
me.class.getResourceAsStream("myfile.xml");
与me.class.getResourceAsStream("file/myfile.xml");
总结
避坑避雷,Mark一下。 (●'◡'●)
- Project 没有 src和bin,大概率可能是文件夹结构的问题,或者遇事不决重启Intell J
- config.properties 找不到很有可能是路径没设置对,比如classpath
参考
[1] Mac 上的 .DS_Store 究竟是什么文件?如何删除?
[2] Java中getResourceAsStream的用法
Q.E.D.