[Java IO]基础:读取文件

1. 读取文件路径字符串

1.1 利用ClassLoader类方法获得文件路径

System.out.println(this.getClass().getClassLoader().getResource(".").getPath());// 得到的是项目的class文件路径
System.out.println(this.getClass().getClassLoader().getResource("").getPath());// 得到的是项目的class文件路径
System.out.println(this.getClass().getResource("/").getPath());// 得到的是项目的class文件路径
System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());
System.out.println(Thread.currentThread().getContextClassLoader().getResource(".").getPath());
System.out.println(this.getClass().getResource("").getPath());// ★得到当前文件所在的包路径
System.out.println(this.getClass().getResource(".").getPath());//★得到当前文件所在的包路径

结果:

/D:/workspace/DGCertTest/build/classes/

/D:/workspace/DGCertTest/build/classes/

/D:/workspace/DGCertTest/build/classes/

/D:/workspace/DGCertTest/build/classes/

/D:/workspace/DGCertTest/build/classes/

/D:/workspace/DGCertTest/build/classes/com/test/

/D:/workspace/DGCertTest/build/classes/com/test/

1.2 通过getCanonicalPath()getAbsolutePath()获得文件路径

File directory = new File("");// 设定为当前文件夹
System.out.println(directory.getCanonicalPath());// 获取标准的路径
System.out.println(directory.getAbsolutePath());// 获取绝对路径
//结果:D:\workspace\java_base
File panFu = new File("/");// 设定为当前文件夹
System.out.println(panFu.getCanonicalPath());//得到所在磁盘
System.out.println(directory.getAbsolutePath());// 获取绝对路径
//结果:D:\

2. 通过文件路径获取IO流

2.1 FileInputStream:读取本地磁盘特定位置的文件

String path=”D:\HwTemp\dongguan_test\test.xml”;

FileInputStream fis=new FileInputStream(new File(path));

但是在这种方式在换个环境测试时又要重新拷贝到别人的磁盘上,没有放到工程中,用工程相对路径来访问方便。

这样工程换个环境能直接运行,即String ->FileInputStream

//工程路径+文件所在工程的相对路径(用)
String path = System.getProperty("user.dir")+"\\src\\file.txt";
//将所有的上面得到的路径中"\"转换成"\\"
path = path.replaceAll("\\\\","\\\\\\\\");
System.out.println(path);
FileInputStream fis = new FileInputStream(new File(path));//D:\\workspace\\java_base\\src\\file.txt

注意:字符串里 \\表示一个”\” 但relaceAll里的 第一个参数是一个正则表达式,在正则里\\\\表示一个”\

System.getProperty("user.dir")Java代码如果放到jsp中,得到的将是IDE的安装路径。所以该代码不能用jsp页面中

2.2 InputStream:方法get****AsStream读取本工程中文件:

该类方法返回InputStream

参考文档:Java读取工程里的文件

  • 方法一:(未验证)将xml文件放在WEB-INF目录下,然后
InputStream is=getServletContext().getResourceAsStream( "/WEB-INF/xmlfile.xml" );
  • 方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态方法getSystemResourceAsStream(String s)读取;
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);
  • 方法三:xml在随意某个包路径下
String s_xmlpath="com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
ClassLoader classLoader=HotspotXmlParser.class.getClassLoader();
InputStream in=classLoader.getResourceAsStream(s_xmlpath);

3. 附件

3.1 附件1:通过System.getProperties()获取系统参数

Properties props=System.getProperties(); //系统属性
System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor"));
System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安装路径:"+props.getProperty("java.home"));
System.out.println("Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虚拟机规范名称:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虚拟机实现版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虚拟机实现名称:"+props.getProperty("java.vm.name"));
System.out.println("Java运行时环境规范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java运行时环境规范供应商:"+props.getProperty("java.specification.vender"));
System.out.println("Java运行时环境规范名称:"+props.getProperty("java.specification.name"));
System.out.println("Java的类格式版本号:"+props.getProperty("java.class.version"));
System.out.println("Java的类路径:"+props.getProperty("java.class.path"));
System.out.println("加载库时搜索的路径列表:"+props.getProperty("java.library.path"));
System.out.println("默认的临时文件路径:"+props.getProperty("java.io.tmpdir"));
System.out.println("一个或多个扩展目录的路径:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系统的名称:"+props.getProperty("os.name"));
System.out.println("操作系统的构架:"+props.getProperty("os.arch"));
System.out.println("操作系统的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator"));   //在 unix 系统中是"/"
System.out.println("路径分隔符:"+props.getProperty("path.separator"));   //在 unix 系统中是":"
System.out.println("行分隔符:"+props.getProperty("line.separator"));   //在 unix 系统中是"/n"
System.out.println("用户的账户名称:"+props.getProperty("user.name"));
System.out.println("用户的主目录:"+props.getProperty("user.home"));
System.out.println("用户的当前工作目录:"+props.getProperty("user.dir"));

3.2 附件2:最基本的路径转换

@Test
public void test_getXmlPath() {
    String path = Thread.currentThread().getContextClassLoader().getResource("").toString();
    path = path.replace(‘/‘, ‘\\‘); // 将/换成\
    path = path.replace("file:", ""); // 去掉file:
    path = path.replace("classes\\", ""); // 去掉class\
    path = path.substring(1); // 去掉第一个\,如 \D:\JavaWeb...
    path += "web.xml";
    System.out.println(path);
}
@Test
public void test_getXmlPath() {
    String path = System.getProperty("user.dir")+"\\src\\file.txt";
    System.out.println();
    //★将所有的上面得到的路径中"\"转换成"\\"
    path = path.replaceAll("\\\\","\\\\\\\\");
    System.out.println(path);
}
时间: 2024-10-24 02:12:00

[Java IO]基础:读取文件的相关文章

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

Java相对路径读取文件

不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: repathtest ├─src │    └─com │            └─lavasoft │                    ├─test │                    └─res ├─doc 1.在Java开发工具的project中使用相对路径 在project中,相对路径的根目录是projec

java多线程批量读取文件(七)

新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一些.而今天,我所要说的是java多线程读取文件的两个例子: 例子1:java多线程批量读取文件 package face.thread.ReadFile; /** * 多线程读.写文件 *  */import java.io.BufferedReader;import java.io.Buffere

JAVA 以字节流读取文件中的BMP图像

用字节流而不是用JAVA的API函数read()有助于大家理解理解BMP的存储方式哈. 同时,从SQL中读取图片的话,也是用字节流读取,需要自己进行转换的. 顺便保存下代码...下次用就有模板了... 只有24位图的哈.   public Image myRead(String path) throws java.io.IOException {     Image image = null;       int biWidth,biHeight,bicount,biSizeImage,npad

Java IO把一个文件中的内容以字符串的形式读出来

代码记录(备查): /** * 把一个文件中的内容以字符串的形式读出来 * * @author zhipengs * */ public class FileToString { public static void main(String[] args) { System.out.println(readFileToString()); } private static String readFileToString() { // new 一个空文件,用于获取路径 File dirs = ne

java io流 创建文件、写入数据、设置输出位置

java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ /** * 存储为二进制,给计算机看的 */ //创建文件 DataOutputStream sjl = new DataOutputStrea

Java程序设计---io流读取文件内容并将其逆值输出到控制台

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.OutputStreamWriter; public class 逆值 {/* *2017-07-01; */    public static void main(String[] args) throws Exception {        // TO

JAVA进行基础的文件IO读写

1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 public class TestIO { 8 9 public void testRead(String path){ 10 FileInputStream is =

java Io流向指定文件输入内容

package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String args[]){ FileWriter fw=null; BufferedWriter bw=null;   //缓冲区输出 FileReader fr=null; BufferedReader bw=null;  //缓冲区输入 try{ fw=new FileWriter("f:\\放弃吧.t