zoukankan      html  css  js  c++  java
  • IO流——字节流

    一、字节输出流 OutputStream

    OutputStream为抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性方法。

    1、方法:

    void close():关闭此输出流并释放与此流有关的所有系统资源。
    void flush():刷新此输出流并强制写出所有缓冲的输出字节。
    void write(byte[] b):将b.length个字节从指定的byte数组写入此输出流。
    void write(byte[] b, int off, int len):将指定byte数组中从偏移量 off 开始的 len 个字节写入此输出流。
    abstract void write(int b):将指定的字节写入此输入流。

    2、FileOutputStream类

    OutputStream 有很多子类,其中子类 FileOutputStream 可用来将数据写入到文件中。
    FileOutputStream 类,即文件输出流,是用于将数据写入到 File 的输出流。

     

    FileOutputStream 类的构造方法:

    FileOutputStream(File file):创建一个向指定File对象表示的文件中写入数据的文件输出流

    FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的文件输出流

    2.1 FileOutputStream类写入数据到文件中

    流对象的使用步骤:
    1.创建流子类的对象,绑定数据目的
    2.调用流对象的write写方法
    3.close释放资源

     1 import java.io.FileOutputStream;
     2 import java.io.IOException;
     3 
     4 public class FileOutputStreamDemo {
     5     public static void main(String[] args) throws IOException {
     6         FileOutputStream fos = new FileOutputStream("F:\123.txt");
     7         byte[] b = "hello".getBytes();
     8         fos.write(b);
     9         fos.close();
    10     }
    11 }

    2.2 文件续写和换行

    直接new FileOutputStream(file)这样创建对象,写入数据,会覆盖原有的文件。
    如何想要实现文件续写,则需使用FileOutputStream(File file, boolean append)或者FileOutputStream(File file, boolean append)这两种构造方法。当append值为true时,就会在文件末尾继续添加。

     

    构造方法:
    FileOutputStream(File file, boolean append):创建一个向指定File对象表示的文件中写入数据的文件输出流
    FileOutputStream(File file, boolean append):创建一个向具有指定名称的文件中写入数据的文件输出流

     

    代码:

     1 import java.io.FileOutputStream;
     2 import java.io.IOException;
     3 
     4 public class FileOutputStreamDemo {
     5 
     6     public static void main(String[] args) throws IOException {
     7         FileOutputStream fos = new FileOutputStream("F:\123.txt", true);
     8         byte[] b = "hello".getBytes();
     9         fos.write(b);
    10         fos.close();
    11     }
    12 }

    执行上面的代码两次,会在123.txt文件中产生“hellohello”数据。


    换行:直接在需要换行的地方加“ ”即可,例如,如果上面的代码需要实现换行功能,可在“hello”后面添加“ ”,即“hello ”。

     

    二、字节输入流InputStream

    InputStream是字节输入流的所有类的超类,定义了字节输入流的基本共性功能方法。

    abstract intread() 这个方法将读入一个字节,并返回读入的字节,或者在遇到输入源结尾时返回-1.
    int read(byte[] b) 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回-1.这个read方法最多读入b.length个字节。
     
     
     

    1.FileInputStream类

    FileInputStream是InputStream的一个子类,可用来读取文件内容。
    FileInputStream从文件系统中的某个文件中获得输入字节。

    1.1 构造方法

    FileInputStream(File file)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象
    FileInputStream(String name) 通过指定的字符串参数来创建File类对象,而后再与File对象所代表的实际路径建立链接创建FileInputStream流对象
     

     

    构造函数 FileInputStream(String name) 的源码:

    1 public FileInputStream(String name) throws FileNotFoundException {
    2         this(name != null ? new File(name) : null);
    3     }

    1.2 read()方法

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.IOException;
     4 
     5 public class FileInputStreamDemo {
     6     public static void main(String[] args) throws IOException {
     7         File file = new File("F:\123.txt");
     8         FileInputStream fis = new FileInputStream(file);
     9         int ch = 0;
    10         while((ch = fis.read()) != -1){
    11             System.out.println((char)ch);
    12         }
    13         fis.close();
    14     }
    15 }
     

    1.3 read(byte[] b)方法

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.IOException;
     4 
     5 public class FileInputStreamDemo {
     6     public static void main(String[] args) throws IOException {
     7         File file = new File("F:\123.txt");
     8         FileInputStream fis = new FileInputStream(file);
     9         byte[] b = new byte[1024];
    10         int ch = 0;
    11         while((ch = fis.read(b)) != -1){
    12             System.out.println(new String(b, 0, ch));
    13         }
    14         fis.close();
    15     }
    16 
    17 }
    18  
     

    练习

     

    1.复制文件

     1 import java.io.FileInputStream;
     2 import java.io.FileOutputStream;
     3 import java.io.IOException;
     4 
     5 public class Copy {
     6     
     7     public static void main(String[] args){
     8         FileInputStream fis = null;
     9         FileOutputStream fos = null;
    10         try {
    11             fis = new FileInputStream("F:\123.txt");
    12             fos = new FileOutputStream("D:\abc.txt");
    13             byte[] buf = new byte[1024];
    14             int len = 0;
    15             while((len = fis.read(buf)) != -1){
    16                 fos.write(buf,0,len);
    17             }
    18         } catch (Exception e){
    19             e.printStackTrace();
    20         } finally {
    21             if(fis != null){
    22                 try {
    23                     fis.close();
    24                 } catch (IOException e) {
    25                     e.printStackTrace();
    26                 }
    27             }
    28             if(fos != null){
    29 
    30                 try {
    31                     fos.close();
    32                 } catch (IOException e) {
    33                     e.printStackTrace();
    34                 }
    35             }
    36 
    37         }
    38     }
    39 
    40 }
  • 相关阅读:
    高性能的序列化与反序列化:kryo的简单使用
    C/C++读写csv文件(用getline探测逗号分隔符)
    VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)
    C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)
    C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)
    DOM解析xml实现读、写、增、删、改
    Go and JSON
    HTTP2.0
    全球化与本地化
    远程调试 Azure 上的 Website
  • 原文地址:https://www.cnblogs.com/peng19920430/p/11456305.html
Copyright © 2011-2022 走看看