关于java web的new File(),如果用绝对路径就可以用,如果用相对路径就有问题了,没把错也读不出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java web的new File(),如果用绝对路径就可以用,如果用相对路径就有问题了,没把错也读不出来相关的知识,希望对你有一定的参考价值。

关于java web的new File(),如果用绝对路径就可以用,如果用相对路径就有问题了,没把错也读不出来。
这个是我用MyEclipse的目录结构,我想用这个"ReadTxt.java"来读取WebRoot目录下的txt下的book.txt。
要怎么用相对路来读取到这个文件呢。要线等。。。
这样子是没问题的。但是用绝对路径的话,以后有什么变化就得改这些路径,有点麻烦。。。现在要把29行的绝对路径改成相对路径

呵呵,你还不懂servlet的容器吧。首先,你的ReadTxt.java编译后生成的class文件是在web-inf下class这个文件夹下,也就是说web-inf下还有一个class文件夹,这个知道的吧,web容器加载class文件的时候,就是加载这个文件夹下的class文件。所以,你可以用class加载器得到这个class文件夹的路径,得到这个路径了你爱放book.txt在哪就放在哪。一般来说都是这样做的,如果要读取一些文件,一般是将这些文件放在class文件夹下,然后用class加载器来取路。
ClassLoader cl = ReadTxt.class.getClassLoader();
String Path = cl..getResource("txt/book.txt").toURI().getPath();
记得将txt/book.txt放到class文件夹下。
慢慢领悟,你行的。
参考技术A

你试试:

../txt/book.txt

追问

谢谢,还是不行。。。


这样子就没问题,txt文件都是存在的

追答..//f//WebRoot//txt//三国演义.txt

亲测可用,我刚试了下,你再看看。

参考技术B 你把那段源代码贴出来看一下追问

这样子是没问题的。但是用绝对路径的话,以后有什么变化就得改这些路径,有点麻烦。。。现在要把29行的绝对路径改成相对路径 

追答

如果你用的是tomcat服务器 默认的根路径是%TOMCAT_HOME%/webapps/project_name/WEB-INF/classes/
你可以把txt文件夹放到classes目录下 然后把29行改成
String txt[] = qq.readLogInfo(ReadTxt.class.getResource("/")+"/txt/三国演义.txt").toString().split("正文");

参考技术C java开发这样的问题多了去了 何必纠结自己呢 一般都是用绝对路径的。 手打哦 采纳吧追问

绝对路径是可以,但把网站发布出去时又得去改这个路径,不是有点麻烦吗???

参考技术D 直接 text/book.txt追问

这样子就行,但是text/book.txt就不行,这两个文件都有存在的。。。

关于java中io流的关闭问题,部分代码,这种情况用不用关闭new FileReader(file)?

BufferedReader br = null;
br=new BufferedReader(new FileReader(file));
br.close();

参考技术A 是的,你的new FileReader(file)是一个匿名对象。

JVM中对于那些打开了没有关闭的IO文件流,会在不再被使用的情况下,等到下次做Full GC的时候把他们全部回收,尽量少使用这种写法。文章来自:http://blog.csdn.net/kongxx/article/details/6405914
参考技术B public BufferedReader(Reader in) 
    this(in, defaultCharBufferSize);

public BufferedReader(Reader in, int sz) 
    ...
    this.in = in;//FileReader
    ...

看BufferedReader的close方法:

public void close() throws IOException 
    ...
    in.close();//调用FileReader的close方法
    ...

调用BufferedReader的close()方法就可以调用FileReader的close()方法,所以楼上的回答不正确.

以上是关于关于java web的new File(),如果用绝对路径就可以用,如果用相对路径就有问题了,没把错也读不出来的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的eclipse怎么没有新建java project选项

java是否用File f=new file;创建文件的

JAVA 关于FILE IO问题

用maven建立java web项目

java Web项目创建之一(普通java web项目的创建与发布)

关于java中装饰者模式的详解,不理解啊,,谁给解释解释。。。