来自于旧站的重置文章。
前言
今天帮畅宝检查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的用法
 
        
        
        
       
         
          
          
          
          