精华内容
下载资源
问答
  • java文件输入输出流
    千次阅读
    2019-05-08 16:28:05

    在Android开发中,文件操作还是比较频繁的,本文主要记录下文件的加载,写入等相关操作的使用。

    流的分类

    在Java程序中操作文件,都是以流的形式来操作

    1. 首先按照流向可以分为输入流与输出流两种,这里的输入输出是站在内存的角度而言的,流向内存的为输入流,流出内存的为输出流
    2. 按照传输的单位可以分为字节流与字符流,字节流传输的是二进制字节,可操作任何类型的文件,字符流传输的是字符,只能用来读取文本文件

    字节流

    字节流有两个抽象的父类,InputStram和outputStream,本文主要记录文件的操作,其他的具体实现类暂不讨论,主要看一下经常使用的几个字节流实现类的使用。
    针对文件操作的字节流主要包括FileInputStream与FileOutputStream

    向磁盘写入文件

    			File destFile = new File(filePath);
                FileOutputStream fileOutputStream = new FileOutputStream(destFile);
                fileOutputStream.write(content.getBytes());
                fileOutputStream.close();
    

    写入文件比较简单,传入一个File对象构造FileOutputStream的对象,然后调用write方法即可,最后一定要调用close,释放资源

    从磁盘读取文件

    			FileInputStream fileInputStream = new FileInputStream(file);
                byte[] bytes = new byte[1024];
                int i;
                while((i=fileInputStream.read(bytes))!=-1){
                    stringBuilder.append(new String(bytes,0,i));
                }
                Log.i(TAG, stringBuilder.toString());
                fileInputStream.close();
    

    相对于从磁盘读入内存,读取文件多了几行代码,但也很好理解。需要声明一个byte类型的数组,用于每次读取时将数据存入该数组,声明一个整型i用于保存一次读取到的字节数。最后再根据将字节数组转换成需要的类型,最后也需要调用close释放资源

    缓冲流

    缓冲流相对于上述的字节流字符流并不是一个层面的东西,它并不具备直接操作文件的能力,而是要基于上述的字节流和字符流为基础。之所以要设计缓冲流这个东西,是为了提高读写效率,因为缓冲是利用了将数据先缓存起来,然后再一起写入或读出,避免频繁的磁盘IO操作,提高读写速度。
    针对字节流的缓冲流类有BufferedoutputStream和BufferedInputStream,实际这两个类的设计利用了装饰者模式,利用它可以把FileInputStream与FileOutputStream给包起来,然后操作文件

    向磁盘写入文件

    			FileOutputStream fileOutputStream = new FileOutputStream(destFile);
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
                bufferedOutputStream.write(content.getBytes());
                bufferedOutputStream.flush();
                bufferedOutputStream.close();
    

    使用的逻辑和FileInputStream差不多,只是包了一层,最后还调用了flush,用于刷新,相当于向磁盘写入一次

    从磁盘读取文件

    			FileInputStream fileInputStream = new FileInputStream(file);
                BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
                byte[] bytes = new byte[1024];
                int i;
                while((i=bufferedInputStream.read(bytes))!=-1){
                     stringBuilder.append(new String(bytes,0,i));
                }
                fileInputStream.close();
                bufferedInputStream.close();
    

    使用方式与FileOutputStream也差不多,只是用BufferedInputStream把他包了起来

    字符流

    字符流主要包括FileWriter和FileReader,字符缓冲流BufferedWriter,BufferedReader,用法与上述的字节流基本一致,只不过调用read之后获取到的是字符类型,需要用char类型的数组去接收

    			FileReader fileReader = new FileReader(file);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                char[] chars = new char[1024];
                int charInt;
                while ((charInt = bufferedReader.read(chars))!=-1){
                    Log.i(TAG,"char:"+new String(chars,0,charInt));
                    stringBuilder.append(new String(chars,0,charInt));
                }
                Log.i(TAG,"stringResult : "+stringBuilder.toString());
                fileReader.close();
                bufferedReader.close();
    

    另外在BufferedReader中还提供了readLine方法,按行读取文本文件

    			FileReader fileReader = new FileReader(file);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String s;
                while ((s=bufferedReader.readLine())!=null){
                    stringBuilder.append(s);
                }
                Log.i(TAG,"stringResult : "+stringBuilder.toString());
                fileReader.close();
                bufferedReader.close();
    

    以上是对于常用的输入输出流使用的总结,如果有写的不对的欢迎批评指正

    更多相关内容
  • Java输入输出流文件读写详解;Java输入输出流文件读写详解。
  • Java文件输入输出流,详细描述了java对文件流的操作
  • java输入输出流

    千次阅读 2022-02-23 20:09:48
    输出流: 从程序向文件中写入数据 按数据传输单位分: 字节流: 以字节为单位传输数据的流 字符流: 以字符为单位传输数据的流,在不同编码中,一个字符等于不同的字节数(ASCII码:一个中文汉字占两个字节。UTF-8编码...

    按流向分:

    输入流: 从文件中读取数据到程序
    输出流: 从程序向文件中写入数据

    按数据传输单位分:

    字节流: 以字节为单位传输数据的流
    字符流: 以字符为单位传输数据的流,在不同编码中,一个字符等于不同的字节数(ASCII码:一个中文汉字占两个字节。UTF-8编码中一个中文(含繁体)等于三个字节。)

    按功能分:

    节点流: 用于直接操作目标设备的流
    过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能

    JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类:

    InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
    OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
    Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
    Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

    inputstream及其子类

     (1)fileinputstream

     public static void main(String[] args) throws IOException {
            File file= new File("E:/IDEAproject/test.txt");
            FileInputStream text=new FileInputStream(file);
            byte [] a=new byte[100];
            text.read(a,1,10);//从文件的第一个位置开始,读10个,放到a数组
            for (int i=0;i<8;i++)
            {
                System.out.println(a[i]);
            }
             text.close();
        }

    outputstream及其子类

    (1)fileoutputstream

       public static void main(String[] args) throws IOException {
                File file= new File("E:/IDEAproject/test.txt");
                FileOutputStream out=new FileOutputStream(file,true);//true表示在原文件后面追加内容false表示覆盖
                byte [] a={'1','2','3','4','5','5','6','a','s','d','w'};
                out.write(a,0,10);
                out.close();
            }
        }

    2)用fileinputstream和fileoutputstream完成文件的复制,因为是字节所以什么文件都可以复制(

     public static void main(String[] args) throws IOException {
            File file2= new File("E:\\IDEAproject\\1.png");
            FileInputStream in =new FileInputStream(file2);
            File file= new File("E:\\IDEAproject\\2.png");
            FileOutputStream out=new FileOutputStream(file);//true表示在原文件后面追加内容false表示覆盖
             int value=in.read();
              while( value!=-1)
              {
                out.write(value);
                  out.flush();
                value = in.read();
              }
                in.close();
                out.close();
            }
        }

    展开全文
  • Java输入输出流详解

    千次阅读 2021-02-26 09:14:45
    通过数据、序列化和文件系统提供系统输入和...在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出文件的操作,网络上的数据,字符串流,对象,zip文件流。1.1、Java流的分类按流向...

    通过数据流、序列化和文件系统提供系统输入和输出。

    Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。

    在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。

    1.1、Java流的分类

    按流向分:

    输入流: 程序可以从中读取数据的流。

    输出流: 程序能向其中写入数据的流。

    按数据传输单位分:

    字节流: 以字节为单位传输数据的流

    字符流: 以字符为单位传输数据的流

    按功能分:

    节点流: 用于直接操作目标设备的流

    过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。

    1.2、java.io常用类

    JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类:

    InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。

    OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。

    Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。

    Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

    java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。

    流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:

    0_1307609601B32I.gif

    0_1307609529LtvQ.gif

    Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的:

    stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:

    (1)字节流

    表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。

    (2)字符流

    以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。

    区别:

    Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。

    但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。

    一.流的层次结构

    定义:

    (1)       java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:

    0_13076105077750.gif

    输入流

    0_13076106948usp.gif

    输出流

    二.InputStream类

    inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

    InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:

    (1)       public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。

    (2)       public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的

    (3)       public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。

    (4)       public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,

    (5)       public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取

    (6)       public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.

    三.OutputStream类

    OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。

    1. public void write(byte b[ ]):将参数b中的字节写到输出流。

    2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。

    3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。

    4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。

    5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

    注意:

    1. 上述各方法都有可能引起异常。

    2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。

    四.FileInputStream类

    FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:

    方式1:

    File fin=new File("d:/abc.txt");

    FileInputStream in=new FileInputStream(fin);

    方式2:

    FileInputStream in=new

    FileInputStream("d: /abc.txt");

    方式3:

    构造函数将 FileDescriptor()对象作为其参数。

    FileDescriptor() fd=new FileDescriptor();

    FileInputStream f2=new FileInputStream(fd);

    五.FileOutputStream类

    FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。

    创建一个文件流对象有两种方法:

    方式1:

    File f=new File("d:/abc.txt");

    FileOutputStream out=new FileOutputStream (f);

    方式2:

    FileOutputStream out=new

    FileOutputStream("d:/abc.txt");

    方式3:构造函数将 FileDescriptor()对象作为其参数。

    FileDescriptor() fd=new FileDescriptor();

    FileOutputStream f2=new FileOutputStream(fd);

    方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。

    FileOutputStream f=new FileOutputStream("d:/abc.txt",true);

    注意:

    (1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。

    举例:2-1

    六.File类

    File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。

    File类主要用于命名文件、查询文件属性和处理文件目录。

    举例:2-2

    七.从一个流构造另一个流

    java的流类提供了结构化方法,如,底层流和高层过滤流。

    而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。

    使用"分层对象(layered objects)",为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被decorate过,传给它的消息总是相同的。这也是Java I/O类库要有"filter(过滤器)"类的原因:抽象的"filter"类是所有decorator的基类。Decorator模式常用于如下的情形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武之地。

    为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。

    FilterInputStream的种类

    功能

    构造函数的参数

    用法

    DataInputStream

    与DataOutputStream配合使用,这样你就能以一种"可携带的方式(portable fashion)"从流里读取primitives了(int,char,long等)

    InputStream

    包含了一整套读取primitive数据的接口。

    BufferedInputStream

    用这个类来解决"每次要用数据的时候都要进行物理读取"的问题。你的意思是"用缓冲区。"

    InputStream,以及可选的缓冲区的容量

    它本身并不提供接口,只是提供一个缓冲区。需要连到一个"有接口的对象(interface object)"。

    LineNumberInputStream

    跟踪输入流的行号;有getLineNumber( )和setLineNumber(int)方法

    InputStream

    只是加一个行号,所以还得连一个"有接口的对象"。

    PushbackInputStream

    有一个"弹压单字节"的缓冲区(has a one byte push-back buffer),这样你就能把最后读到的那个字节再压回去了。

    InputStream

    主要用于编译器的扫描程序。可能是为支持Java的编译器而设计的。用的机会不多。

    FilterOutputStream的种类

    功能

    构造函数的参数

    用法

    DataOutputStream

    与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

    OutputStream

    包括写入primitive数据的全套接口。

    PrintStream

    负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

    一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

    应该是OutputStream对象的最终包覆层。用的机会很多。

    BufferedOutputStream

    用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

    OutputStream, 以及一个可选的缓冲区大小

    本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

    DataInputStream类对象可以读取各种类型的数据。

    DataOutputStream类对象可以写各种类型的数据;

    创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

    FileInputStream in=new FileInputStream("d:/abc.txt");

    DataInputStream din=new DataInputStream(in);

    7.2BufferInputStream和bufferOutputStream

    允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

    BufferInputstream定义了两种构造函数

    (1)       BufferInputStream b= new BufferInputstream(in);

    (2)       BufferInputStream b=new BufferInputStream(in,size)

    第二个参数表示指定缓冲器的大小。

    同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

    7.3printstream

    用于写入文本或基本类型

    两种构造函数方法:

    PrintStream ps=new PrintStream(out);

    PrintStream ps=new PrintStream(out, autoflush)

    第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。

    八.字符流的读取和写入

    java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

    0_1307611216sr6D.gif

    Reader 体系结构

    (1)       FileReader

    FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:

    --将文件名作为字符串

    FileReader f=new FileReader(“c:/temp.txt”);

    --构造函数将File对象作为其参数。

    File f=new file(“c:/temp.txt”);

    FileReader f1=new FileReader(f);

    --构造函数将FileDescriptor对象作为参数

    FileDescriptor() fd=new FileDescriptor()

    FileReader f2=new FileReader(fd);

    (2)    charArrayReader

    将字符数组作为输入流,构造函数为:

    public CharArrayReader(char[] ch);

    (3)    StringReader

    读取字符串,构造函数如下:

    public StringReader(String s);

    (4)    InputStreamReader

    从输入流读取字节,在将它们转换成字符。

    Public inputstreamReader(inputstream is);

    (5)    FilterReader

    允许过滤字符流

    protected filterReader(Reader r);

    (6)    BufferReader

    接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。

    Public BufferReader(Reader r);

    0_13076114250kKk.gif

    Writer类体系结构

    (1)       FileWrite

    将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。

    Public FileWrite(file f);

    (2)chararrayWrite()

    将字符缓冲器用作输出。

    Public CharArrayWrite();

    (3)    PrintWrite

    生成格式化输出

    public PrintWriter(outputstream os);

    (4)    filterWriter

    用于写入过滤字符流

    protected FilterWriter(Writer w);

    FilterOutputStream的种类

    功能

    构造函数的参数

    用法

    DataOutputStream

    与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

    OutputStream

    包括写入primitive数据的全套接口。

    PrintStream

    负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

    一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

    应该是OutputStream对象的最终包覆层。用的机会很多。

    BufferedOutputStream

    用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

    OutputStream, 以及一个可选的缓冲区大小

    本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

    DataInputStream类对象可以读取各种类型的数据。

    DataOutputStream类对象可以写各种类型的数据;

    创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

    FileInputStream in=new FileInputStream("d:/abc.txt");

    DataInputStream din=new DataInputStream(in);

    7.2BufferInputStream和bufferOutputStream

    允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

    BufferInputstream定义了两种构造函数

    (1)       BufferInputStream b= new BufferInputstream(in);

    (2)       BufferInputStream b=new BufferInputStream(in,size)

    第二个参数表示指定缓冲器的大小。

    同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

    7.3printstream

    用于写入文本或基本类型

    两种构造函数方法:

    PrintStream ps=new PrintStream(out);

    PrintStream ps=new PrintStream(out, autoflush)

    第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流

    展开全文
  • java文件内容操作 -- 输入输出流

    千次阅读 2022-03-09 13:31:12
    Reader(字符输入流)与Writer(字符输出流) Print 流 我们通过对File类的学习, 了解到File类并不能去操作文件的内容,可以操作文件内容的则是以下这些实现类,现在来一一介绍 InputStream(输入字节流)和OutputStream...

    目录

    InputStream(输入字节流)和OutputStream(输出字节流)

    Reader(字符输入流)与Writer(字符输出流)

    Print 流


    我们通过对File类的学习, 了解到File类并不能去操作文件的内容,可以操作文件内容的则是以下这些实现类,现在来一一介绍

    InputStream(输入字节流)和OutputStream(输出字节流)

          在谈这两个类之前,我们先来聊聊,什么是输入和输出呢 , 简单理解的话,我们编写的程序就相当于一个中转站, 首先将一个文件的内容输入进来, 然后再通过中转站将内容输出到另一个文件上,那么在这个基础之上呢 , 我们将要介绍的inputStream与OutputStream就相当于两段传输的管道, 起到传输字节的作用,如下图

    需要注意的是, InputStream与OutputStream是抽象类

    最终的实现类我们用的是 FileInputStream 与 FileOutputStream , 先看示例,完整代码如下

    FileInputStream in = null;    //字节输入流
    BufferedInputStream bin = null;  //高效字节缓冲流
    FileOutputStream out = null;  //字节输出流
    BufferedOutputStream bout = null;  //高效字节输出流
    try {
        in = new FileInputStream("D:\\demo\\www.txt");
        bin = new BufferedInputStream(in);   //用缓冲流包装包装
        out = new FileOutputStream("D:\\demo\\eee.txt");
        bout = new BufferedOutputStream(out);
        //定义一个缓冲数组,一次读入1024个字节
        byte[] bytes = new byte[1024];
        //length为实际读入byte[]数组的字节个数
        int length = 0;
        //read()方法读完之后会返回-1
        while ((length = bin.read(bytes))!=-1){
              //写出
              bout.write(bytes,0,length);
        }
    } catch (FileNotFoundException e) {  //处理编译期异常
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    // 关闭管道
        try {
           if (bin != null){
              bin.close();
           }
           if (bout != null){
              bout.flush();  //刷新缓冲区
              bout.close();
           }
        }catch (IOException e){
           e.printStackTrace();
        }
    }

    原文件 : 

    执行后目标文件 : 

           需要注意的几点是, 如果我们输出的目标文件不存在的话,那么java是会去自动创建这个文件的,但是不能创建文件夹 , 并且在上述代码中,采用了缓冲数组和高效缓冲流(BufferedInputStream与BufferedOutputStream)的做法 , 这样做的好处是大大提升了效率

    高效缓冲流的底层做法其实也是提供了缓存数组

          试想,原本的字节流一次读一个字节,然后将它写出去,每次读一个效率未免太低,所以我们采用了缓冲数组的做法, 让它一次读入一定数量的字节,然后再去处理它,这样提升了效率

    Reader(字符输入流)与Writer(字符输出流)

         有了字节流, 那么也会有字符流, 顾名知义, 字节流每次会读入一个字节,而字符流每次则会读入一个字符, 采用utf-8的编码规范 , 一个英文字母就是一个字节, 一个汉字则是三个字节, 但它们都是一个字符, 字符流每次会读入一个完整的字符

    另外,这两个类也是抽象类, 我们实现用的是FileReader与FileWriter这两个实现类

    代码如下:

    FileReader in = null;
            FileWriter out = null;
            BufferedReader bin = null;
            BufferedWriter bout = null;
            try {
                in = new FileReader("D:\\demo\\www.txt");
                bin = new BufferedReader(in);
                // 构造方法中将append属性设置为:true 不会替换原来的文件内容
                out = new FileWriter("D:\\demo\\eee.txt",true);
                bout = new BufferedWriter(out);
                String str = null;
                while ((str = bin.readLine()) != null){
                    bout.write(str);
                    bout.newLine(); //换行
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    bin.close();
                    bout.flush();
                    bout.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

     上述代码可将以下文件完整的输出到另一文件中

    字符流为何能辨别我们读入的是一个正确的字符呢 , FileReader类继承了 InputStreamReader类,这个类又称为转换流, 它是字节流到字符流之间的桥梁

    Print 流

    这里我们主要介绍PrintWriter流(字符打印流) , 我们一般在javaEE程序中用到 , 例 :

    try {
        PrintWriter out = new PrintWriter("D:\\demo\\asd.html");
        out.println("<a href=''>超链接</a>");  //超链接标签, html语言
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    结果 : 

    展开全文
  • java 文件输入输出流 实例代码java 文件输入输出流 实例代码
  • 理解JAVA输入输出流

    千次阅读 2021-03-11 17:02:18
    一、IO流作用IO流就是用来处理设备上的数据,包括文件,磁盘,网络等二、分类按处理的数据类型不同:字符流、字节流按流向不同:JAVA 中流的处理是单向的,分为输入流和输出流三、抽象类1...我们以文件输入输出流进...
  • java输入输出流文件处理进行详细的阐述
  • java文件操作输入输出

    千次阅读 2021-01-21 14:52:35
    目录 一、实验目的 二、实验代码 1.使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,...1. 掌握输入输出流的总体结构; 2. 掌握流的概念; 3. 掌握FileInputStream类、FileOutpu
  • Java输入输出流

    千次阅读 2021-02-12 21:28:28
    Java所有的I/O机制都是基于数据进行输入输出,这些数据表示了字符或者字节数据的流动序列。Java的I/O提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据的方式读写它的数据的方法。Java....
  • 学会Java输入输出流,看这一篇就够了,建议收藏!

    千次阅读 多人点赞 2021-10-13 20:42:30
    一起回顾一下java流的使用。
  • java输入输出流

    千次阅读 2021-03-13 07:19:03
    java输入输出流java IO综述在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。Java I/O主要包括如下几个层次,包含三个...
  • Java高效输入输出流讲解

    千次阅读 2019-08-12 09:47:25
    Java高效输入输出流讲解 Java中执行输出和输入操作,需要通过IO流。例如最常见的System.out.println()就是一个输出流。IO流的类比较多,但核心体系就是由File、InputStream、OutputStream、Reader、Writer和...
  • Java输入输出流.pdf

    2019-08-05 17:17:14
    Java输入输出流.pdf
  • 切记: 读写文件一定要及时关闭输入输出流 项目中,用到将rtf文档上传后修改一个更新标记为0未更新,另外一个程序将文档上传到LED屏上面,LED程序检测到更新标记为未更新时将状态投到LED上面,并将状态更新为1...
  • java输入输出流详解

    千次阅读 2021-02-26 18:40:56
    1.什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作.Java所有的I/O机制都是基于数据进行输入输出,这些数据表示了字符或者字节数据的流动序列。Java的I/O提供了读写数据的标准方法。任何Java中表示...
  • 1.编写应用程序,使用文件输入输出流实现文件的复制,被拷贝的源文件和复制的目标文件由命令行参数给出。 2.编写应用程序,创建一个文件输出流,向文件中分别写入以下类型数据:int、double和字符串,然后创建一个...
  • Java 输入输出流学习总结

    千次阅读 2021-11-17 21:18:45
    文章目录前言:为什么要有输入输出流一、Java 的标准输入输出标准输入 System.in标准输出 System.out程序 exp8_3:简单的输入输出二、输入输出流框架三、输入输出流类的应用四、RandomAccessFile 类输入输出流总结 ...
  • java文件输入流(FileInputStream)和输出流(FileOutputStream),使用场景是什么,通过二者实现文件内容的写入和读取
  • 输入输出的重要性: 输入和输出功能是Java对程序...Java输入输出功能来自java.io 包中的InputStream类、OutputStream类、Reader类和Writer类以及继承它们的各种子类。 (一)解析文件处理的奥秘 1、学习使用文件
  • 输入输出含义和意义:输入和输出功能是Java对程序处理数据能力的提高,java以流的形式处理数据。流是一组有序的数据序列,根据操作类型,分为输入流和输出流。程序从输入流读取数据,向输出流写入数据。Java是面向...
  • Java 输入输出流

    千次阅读 多人点赞 2021-04-15 17:02:47
    Java 输入输出流(I/O流)1 File类1.1 文件的属性1.2 目录2 文件字节输入输出流二级目录三级目录3 文件字符输入输出流二级目录三级目录4 缓冲流二级目录三级目录 概述:输入输出流提供一条通道程序,可以...
  • java 输入输出流

    千次阅读 多人点赞 2020-06-18 21:57:53
    Java中定义数据按照流向,分为输入流和输出流。 首先我们来了解输入流,从字面上就很容易理解,凡是从外部流入的数据都可以通过输入流来处理。比如读取文件输出流,就表示从内部流出的数据,比如:我们编辑了...
  • java文件输入输出流学习笔记

    千次阅读 2014-11-06 20:00:19
    1.字节输入输出流:
  • 工作中经常会遇到,将一个或多个文件读取,然后压缩,然后再怎么怎么做。...如果每个过程都需要创建一个临时文件,可能会创建许多临时文件,那么就可以将输入输出流无缝衔接,不需要使用临时文件了。
  • JAVA输入输出流实现文件复制

    千次阅读 2020-05-16 15:29:02
    JAVA输入输出流实现文件复制 步骤使用eclipse 1.在D盘下创建一个文件abc.txt(被复制的文件); 2.执行如下代码,代码已注释 将D盘的文件复制到当前文件夹下 CopyFile.java //三步骤 1.创建对象 2.调用方法 3.关闭流...
  • Java中字符输入输出流

    千次阅读 2019-12-02 10:50:58
    由于字节不能很好地操作Unicode字符,例如一个汉字在文件中占用连个字节,如果使用字节,读取不当会出现乱码现象 Reader:用于读取字符的抽象类,其部分方法如下 FileRead:是用于读取字符,是Reader...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 297,422
精华内容 118,968
关键字:

java文件输入输出流