javaweb(实⽤)-IDEA下resources⽬录下txt⽂件读取写⼊引
发的项⽬后台。。。
⾸先idea下真实路径与项⽬原本路径对⽐:
(⽂件操作之后idea内打开项⽬内的⽂件并没有任何变化,项⽬真实路径或者说编译后情况下的⽂件发⽣了变化)
项⽬中resources⽂件原本路径:
D:\java\IDEAProjects\springDemo\firstWeb\resources\(windows资源管理器的直接复制过来的⽬录)
项⽬中真实resources⽂件的路径:(因为配了输出的位置在classes⽂件夹下)
所以是:D:/java/IDEAProjects/springDemo/firstWeb/web/WEB-INF/classes/
获得resources的⽂件路径:
String path = Class().getClassLoader().getResource("./").getPath();
输出path是:/D:/java/IDEAProjects/springDemo/firstWeb/web/WEB-INF/classes/最前⾯会带⼀个“/”
对resources⽂件夹下的⽂件可以直接这样读取
InputStream inputStream =
ClassLoader().getResourceAsStream("/coupon-export-template.xls");
最好把⽂件放进resources进⾏读写,通过包的读取的⽂件会出现问题,也不好管理。(不管是⽹上加斜杠还是不加斜杠,⽂件流读取都是空指针,因为根本没有编译这些不是.java的⽂件,如果把它放进classes编译⽂件夹的话,就不是空指针了)
String file = "/com/searlas/tool/coupon-export-template.xls";
InputStream is = ResourceAsStream(file);
replaceall()所以读取配置⽂件放进resources⽂件夹⽐较好。
⽂件的操作
经过尝试⼀下四种路径都可以实现写⼊,读取想必也可以
测试代码:
@Test
public void readTest(){
String path = Class().getClassLoader().getResource("./").getPath();//"./"效果⼀样
System.out.println(path);
System.out.println("---------------------------------------------------------------");
path = path.substring(1);
System.out.println(path);
System.out.println("--------------------------------------------------------------");
path = placeAll("/", "\\\\");
System.out.println(path);
System.out.println("--------------------------------------------------------------");
path = placeAll("\\\\", "\\\\\\\\");
System.out.println(path);
Date date = new Date();
String key = String();
try {
FileOutputStream fos = new FileOutputStream(new File(path));
fos.Bytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
⼩测试(写⽂件,也试试FileWriter)
直接相对路径写⼊好像是会出现问题的
(下图注释的内容)
// 测试写⼊⽬录
String root = Class().getResource("/").getPath();
//File file = new File( "/key");
File file = new File( root + "key");
if (!ists()) {
file.mkdir();
}
//File peoFile = new File("/key" + "/people.ser");
File peoFile = new File(root + "key" + "/people.ser");
if (!ists()) {
try {
} catch (IOException e) {
e.printStackTrace();
}
}
try {
FileWriter fw = new FileWriter(peoFile);
fw.write(1 + "\n1");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
相对路径写⽂件会报权限问题permission denied
应该是不能写⼊到编译的⽂件夹内,但是通过绝对路径访问项⽬内⽂件都是可以的。
如果是通过绝对路径访问编译⽂件夹下的⽂件会报错。不到⽂件。
C:\Users\searlas\IdeaProjects\newLearningDemo\java\target\
对于⽂件写⼊,只要绝对路径就⾏了,⼀般对于⽂件存储也都是绝对路径⽂件夹内写⼊,相对路径写⼊classes⽂件夹应该是不怎么实⽤也会报错。
杂记
附上项⽬内获取绝对路径的⽅法:(应该是他⼈总结的 以前笔记本⾥⾯发现的,侵删)
1可以在servlet的init⽅法⾥
String path = getServletContext().getRealPath("/");
这将获取web项⽬的全路径
例如 :E:\eclipseM9\workspace\tree\
tree是我web项⽬的根⽬录
2.你也可以随时在任意的class⾥调⽤
这将获取 到classes⽬录的全路径
例如 : E:\eclipseM9/workspace/tree/WEB-INF/classes/
这个⽅法也可以不在web环境⾥确定路径,⽐较好⽤
如 /tree
tree是我的web项⽬的root context
/*jsp 取得当前⽬录的路径
RealPath("");
/*得到jbossWEB发布临时⽬录 warUrl=.../tmp/deploy/tmp14544test-exp.war/
path=C:\jboss-4.0.5.GA\server\default\tmp\deploy\tmp14544test-exp.war\
String path = (ContextPath();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论