Java怎么使用I/O流读取文件内容

发布时间:2021-09-28 14:32:49 作者:小新
来源:亿速云 阅读:137

这篇文章主要介绍了Java怎么使用I/O流读取文件内容,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体如下:

要利用I/O流读取文件内容,首先要掌握InputStream的体系结构。

这个体系中FileInputStream和BufferedInputStream是一定要掌握的,因为使用的频率比较高。

InputStream的方法:InputStream位于java.io包下

OutputStream的方法:

读取文件(代码):

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;/** * I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。 * 输入流:数据源数据流向计算机内存的过程 * 输出流:把数据从程序流向目标数据源的过程 * @author Administrator * */public class Ch01 {    /**     * 读取文件内容     * @param args     */    public static void main(String[] args) {        //InputStream:是一个抽象类        // \:是一个 转移符        //表示磁盘路径的两种表示方式:1、\\  2、/        try {            //从文件地址中读取内容到程序中            //1、建立连接            InputStream is = new FileInputStream("E:/iodemo/ch01.txt");            //2、开始读取信息            /*            //方法1:一次只读一个            System.out.println(is.read());//读取的是字节型的:49            System.out.println((byte)is.read());//50      */                //方法2:定义数组,循环读取            //先定义一个字节数组存放数据            byte[] b = new byte[5];//把所有的数据读取到这个字节当中            //声明一个int存储每次读取到的数据            int i = 0;            //定义一个记录索引的变量            int index = 0;            //循环读取每个数据            while((i=is.read())!=-1){//把读取的数据放到i中                b[index]=(byte) i;                index++;            }            //把字节数组转成字符串            System.out.println(new String(b));            //关闭流            is.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            //系统强制解决的问题:文件没有找到            e.printStackTrace();        } catch (IOException e) {            //文件读写异常            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;/** * I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。 * 输入流:数据源数据流向计算机内存的过程 * 输出流:把数据从程序流向目标数据源的过程 * @author Administrator * */public class Ch02 {    /**     * 读取文件内容     * @param args     */    public static void main(String[] args) {        //InputStream:是一个抽象类        // \:是一个 转移符        //表示磁盘路径的两种表示方式:1、\\  2、/        try {            //从文件地址中读取内容到程序中            //1、建立连接            InputStream is = new FileInputStream("E:/iodemo/ch01.txt");            //2、开始读取信息                //先定义一个字节数组存放数据            byte[] b = new byte[5];//把所有的数据读取到这个字节当中            //完整的读取一个文件            is.read(b);            //read:返回的是读取的文件大小            //最大不超过b.length,返回实际读取的字节个数            System.out.println(Arrays.toString(b));//读取的是字节数组            //把字节数组转成字符串            System.out.println(new String(b));            //关闭流            is.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            //系统强制解决的问题:文件没有找到            e.printStackTrace();        } catch (IOException e) {            //文件读写异常            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;/** * I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。 * 输入流:数据源数据流向计算机内存的过程 * 输出流:把数据从程序流向目标数据源的过程 * @author Administrator * */public class Ch03 {    /**     * 读取文件内容     * @param args     */    public static void main(String[] args) {        //InputStream:是一个抽象类        // \:是一个 转移符        //表示磁盘路径的两种表示方式:1、\\  2、/        try {            //从文件地址中读取内容到程序中            //1、建立连接            InputStream is = new FileInputStream("E:/iodemo/ch01.txt");            //2、开始读取信息                //先定义一个字节数组存放数据            byte[] b = new byte[is.available()];//把所有的数据读取到这个字节当中            //is.available():返回文件的大小    //        while(is.available()==0);//不等于0时才停止循环            //完整的读取一个文件            int off = 0;            int le = 2;            while(is.read(b, off, 2)!=-1){                off+=1;            }            is.read(b,off,2);            //read:返回的是读取的文件大小            //最大不超过b.length,返回实际读取的字节个数            System.out.println(Arrays.toString(b));//读取的是字节数组            //把字节数组转成字符串            System.out.println(new String(b));            //关闭流            is.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            //系统强制解决的问题:文件没有找到            e.printStackTrace();        } catch (IOException e) {            //文件读写异常            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Arrays;public class Ch04 {    /**     * 读取中文字符的文件     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        try {            /*FileInputStream fis = new FileInputStream("E:/iodemo/ch04.txt");            //包装流            BufferedInputStream bis = new BufferedInputStream(fis);*/            //包装流            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:/iodemo/ch04.txt"));            //读取文件内容            byte[] b = new byte[bis.available()];            bis.read(b);            /*char[] c = new char[b.length];            for (int i = 0; i < c.length; i++) {                c[i]=(char) b[i];            }            System.out.println(Arrays.toString(c));//乱码             */                    System.out.println(Arrays.toString(b));//得到的是字节            //String(byte[])把字节数组转成字符串            System.out.println(new String(b));//可以得到中文            bis.close();//关闭流(关闭bis就可以了)        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class Ch05 {    public static void main(String[] args) {        // TODO Auto-generated method stub        try {            //读取文件            FileInputStream fis = new FileInputStream("E:/iodemo/ch01.txt");            //fis.available():文件的长度            byte[] b=new byte[fis.available()];            //skip:跳过n个字节后再开始读取            fis.skip(5);//跳过前5个            fis.read(b);            System.out.println(new String(b));            fis.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class Ch06 {    /**     * 读取过程暂停,给当前做一个标记,下一次从标记位置开始读取     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        //读取过程中暂停        //给当前做一个标记        //下一次从标记位置开始读取        try {            BufferedInputStream bis= new BufferedInputStream(new FileInputStream("E:/iodemo/ch06.txt"));            byte[] b = new byte[bis.available()];        //    bis.read(b, 0, b.length/2);            //设置断点            bis.mark(bis.read(b, 0, b.length/2));//位置就是读取的长度            System.out.println(new String(b));            System.out.println("暂停读取....");            Thread.sleep(2000);//休眠2s            //休眠后继续读            System.out.println("继续读取...");            //reset:将当前复位的位置设置成上次调用mark标记的位置            bis.reset();            bis.read(b);            System.out.println(new String(b));            bis.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.SequenceInputStream;/** * 序列流(集合流) * 把n个流合并在一起读取 * @author Administrator * */public class Ch07 {    public static void main(String[] args) {        try {            //第一个文件流            FileInputStream fis1=new FileInputStream("E:/iodemo/ch01.txt");            //第二个文件流            FileInputStream fis2=new FileInputStream("E:/iodemo/ch04.txt");            //合并到序列流中            SequenceInputStream sis=new SequenceInputStream(fis1, fis2);            //方式1//            //临时存放数据的数组//            int len =fis1.available()+fis2.available();//            byte[] b=new byte[2*len+1];//            //把每一次读取到的临时数据存放如sb中////            StringBuffer sb=new StringBuffer();//            //一次性读取所有的内容//            int off=0;//            int i=0;//            while((i=sis.read(b,off,len))!=-1) { ////                sb.append();//                off+=i;//            }//            System.out.println(new String(b));            //方式2            byte[] b=new byte[fis1.available()];//            StringBuffer sb=new StringBuffer();//            int i=0;            while(sis.read(b)!=-1) {                System.out.println(new String(b));//                sb.append(new String(b));            }//            System.out.println(sb.toString());            sis.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

package com.jredu.oopch21;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.SequenceInputStream;import java.util.Vector;public class Ch08 {    public static void main(String[] args) {        // TODO Auto-generated method stub        try {            //三个文件流            FileInputStream fis1 = new FileInputStream("E:/iodemo/a.txt");            FileInputStream fis2 = new FileInputStream("E:/iodemo/b.txt");            FileInputStream fis3 = new FileInputStream("E:/iodemo/c.txt");            //把三个流添加到集合中            Vector<FileInputStream> vector = new Vector<>();            vector.add(fis1);            vector.add(fis2);            vector.add(fis3);        //    vector.elements(); //方法返回的是Enumeration            //合并到一个序列流中            SequenceInputStream sis = new SequenceInputStream(vector.elements());            byte[] b = new byte[fis1.available()+fis2.available()+fis3.available()];            //读取            int off=0;            //vector.get(i).available():一个文件的长度            for (int i = 0; i < vector.size(); i++) {                //off:数组当中存放数据的起始下标的位置                off+=sis.read(b, off, vector.get(i).available());//每次读取一个文件的长度            }            System.out.println(new String(b));            sis.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Java怎么使用I/O流读取文件内容”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性
  2. Java-war-jar-docker

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Centos和Ubutun系统内核升级操作是怎样的

下一篇:如何使用Shell编程Bash空格

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》