java读取文件的两种要领:java.io和java.lang.ClassLoader
// java.io: File file = new File("..."); FileInputStream fis = new FileInputStream("..."); FileReader fr = new FileReader("..."); //ClassLoader: ClassLoader loader = XXXClass.class.getClassLoader(); ClassLoader loader2 = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("..."); File file = new File(url.getFile()); InputStream input = loader.getResourceAsStream("...");
java.io 包中的类老是依据当前用户目次来剖析相对途径名,也就是说相对途径是不是好使,取决于 user.dir 的值。体系属性 user.dir 是 JVM 启动的时刻设置的,一般是 Java 虚拟机的挪用目次,即实行 java 敕令地点的目次。
关于 tomcat/jboss 容器,user.dir 是 %home/bin%/ 目次,由于这个目次就是我们启动 web 容器的处所
在 eclipse 中运转顺序的时刻,eclipse 会将 user.dir 的值设置为工程的根目次
用户目次能够运用 System.getProperty("user.dir") 来检察
所以说,运用 java.io 读取文件,无论是相对途径,照样绝对途径都不是好的做法,能不运用就不要运用(在 JavaEE 中)。
运用ClassLoader
Class.getResource() 有 2 种体式格局,绝对途径和相对途径。绝对途径以 / 开首,从 classpath 或 jar 包根目次下最先搜刮;
相对途径是相对当前 class 地点的目次,许可运用 .. 或 . 来定位文件。
ClassLoader.getResource() 只能运用绝对途径,而且不用以 / 开首。
这两种体式格局读取资本文件,不会依赖于 user.dir,也不会依赖于细致布置的环境,是引荐的做法(JavaEE)
怎样拔取
java.io:
相干于当前用户目次的相对途径读取;注意与磁盘文件打交道或许纯 java project 中运用。
虽然 ClassLoader 体式格局更通用,然则假如不是 javaEE 环境,要定位到 classpath 途径下去读文件是不合理的。
java.lang.ClassLoader:
相干于 classpath 的相对途径读取;发起在 javaEE 环境中都运用这类体式格局。
一般,ClassLoader 不能读取太大的文件,它合适读取 web 项目的那些配置文件,假如须要读取大文件,照样要用 IO 包下的,能够先经由过程 ClassLoader 获取到文件的绝对途径,然后传给 File 或许其他对象,用 io 包里的对象去读取会更好些。
更多java学问请关注java基础教程。
以上就是java中怎样读取文件的细致内容,更多请关注ki4网别的相干文章!