字节流, FileOutputStream类,FileInputStream类,复制文件,字符流

字节输出流OutputStream

OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节

基本方法:

子类可继承调用以上方法

FileOutputStream类

构造方法:

FileOutputStream类写入数据到文件中

例子:

package com.oracle.FileoutStream;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutPUTsteam {

    public static void main(String[] args) throws IOException {

        FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt");//此构造方法,如果文件存在,则覆盖
        //没有,则创建
//        f.write(100);//字节流,结果为d,想输出100,就写三个字节,49,48,48
        byte[] bytes={-65,-66,-67,-68};//烤郊
//        byte[] bytes={65,66,67,68};//ABCD

//        f.write(bytes);
        f.write(bytes,1,2);//窘

/*        FileOutputStream f=new FileOutputStream("e:\\test\\bi.txt",true);//在后面续写,加true
//        f.write(bytes,1,2);//窘
        String str="abcd\r\n";//\r\n换行
        f.write(str.getBytes());
//        new String(bytes);
*/        f.close();
    }

}

IO异常的处理

package com.oracle.FileoutStream;

import java.io.FileOutputStream;
import java.io.IOException;

public class IoEXCEPTION {

    public static void main(String[] args) {
        //定义FileOutputStream的引用
        FileOutputStream f=null;
        try{
            //创建FileOutputStream对象
                f=new FileOutputStream("e:\\test\\bi.txt");
                //写数据
                f.write(100);
        }catch(IOException e){
            throw new RuntimeException("文件写入失败");//一旦发生io异常,直接终止关闭
        }finally{
            try {
                //一定要判断fos是否为null,只有不为null时,才可以关闭资源
                if(f!=null){
                    f.close();
                }
            } catch (IOException e) {
                throw new RuntimeException("关闭资源失败");
            }
        }

    }

}

字节输入流InputStream

int read():读取一个字节并返回,没有字节返回-1.

int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

FileInputStream类

FileInputStream类读取数据read方法

public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("c:\\file.txt");
        //创建一个字节输入流对象,必须明确数据源,其实就是创建字节读取流和数据源相关联。
        FileInputStream fis = new FileInputStream(file);
        //读取数据。使用 read();一次读一个字节。
        int ch = 0;
        while((ch=fis.read())!=-1){
            System.out.println("ch="+(char)ch);
        }

        // 关闭资源。
        fis.close();
    }
}

读取数据read(byte[])方法

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
         * 演示第二个读取方法, read(byte[]);
         */
        File file = new File("c:\\file.txt");
        // 创建一个字节输入流对象,必须明确数据源,其实就是创建字节读取流和数据源相关联。
        FileInputStream fis = new FileInputStream(file);
        //创建一个字节数组。
        byte[] buf = new byte[1024];//长度可以定义成1024的整数倍。
        int len = 0;
        while((len=fis.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }
        fis.close();
    }
}

字节流复制文件

public class CopyFileTest {
    public static void main(String[] args) throws IOException {
        //1,明确源和目的。
        File srcFile = new File("c:\\YesDir\test.JPG");
        File destFile = new File("copyTest.JPG");

        //2,明确字节流 输入流和源相关联,输出流和目的关联。
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);

        //3, 使用输入流的读取方法读取字节,并将字节写入到目的中。
        int ch = 0;
        while((ch=fis.read())!=-1){
            fos.write(ch);
        }
        //4,关闭资源。
        fos.close();
        fis.close();
    }
}

缓冲数组方式复制文件

public class CopyFileByBufferTest {
    public static void main(String[] args) throws IOException {
        File srcFile = new File("c:\\YesDir\test.JPG");
        File destFile = new File("copyTest.JPG");
        // 明确字节流 输入流和源相关联,输出流和目的关联。
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);
        //定义一个缓冲区。
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = fis.read(buf)) != -1) {
            fos.write(buf, 0, len);// 将数组中的指定长度的数据写入到输出流中。
        }
        // 关闭资源。
        fos.close();
        fis.close();
    }
}

这样执行速度比一个一个读写要快

字符流

FileReader读取包含中文的文件

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
        //给文件中写中文
        writeCNText();
        //读取文件中的中文
        readCNText();
    }
    //读取中文
    public static void readCNText() throws IOException {
        FileReader fr = new FileReader("D:\\test\\cn.txt");
        int ch = 0;
        while((ch = fr.read())!=-1){
            //输出的字符对应的编码值
            System.out.println(ch);
            //输出字符本身
            System.out.println((char)ch);
        }
    }
    //写中文
    public static void writeCNText() throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\test\\cn.txt");
        fos.write("欢迎你".getBytes());
        fos.close();
    }
}

FileWriter写入中文到文件中

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //演示FileWriter 用于操作文件的便捷类。
        FileWriter fw = new FileWriter("d:\\text\\fw.txt");
        fw.write("你好谢谢再见");//这些文字都要先编码。都写入到了流的缓冲区中。
        fw.flush();
        fw.close();
    }
}

flush和close的区别

  flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

  close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

字符流复制文本文件

public class CopyTextFileTest {
    public static void main(String[] args) throws IOException {
        copyTextFile();
    }
    public static void copyTextFile() throws IOException {
        //1,明确源和目的。
        FileReader fr = new FileReader("c:\\cn.txt");
        FileWriter fw = new FileWriter("c:\\copy.txt");
        //2,为了提高效率。自定义缓冲区数组。字符数组。
        char[] buf = new char[1024];
        int len = 0;
        while((len=fr.read(buf))!=-1){
            fw.write(buf,0,len);
        }
        /*2,循环读写操作。效率低。
        int ch = 0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        */
        //3,关闭资源。
        fw.close();
        fr.close();
    }
}

原文地址:https://www.cnblogs.com/lzw123-/p/9513519.html

时间: 2024-08-02 16:55:17

字节流, FileOutputStream类,FileInputStream类,复制文件,字符流的相关文章

javaIO流之字节流的四种方式复制文件方式总结

/* * 需求:把e:\\a.mp4复制到当前项目目录下的copy.mp4中 * * 字节流四种方式复制文件: * 基本字节流一次读写一个字节: 共耗时:117235毫秒 * 基本字节流一次读写一个字节数组: 共耗时:156毫秒 * 高效字节流一次读写一个字节: 共耗时:1141毫秒 * 高效字节流一次读写一个字节数组: 共耗时:47毫秒 */ package cn.itcast_06; import java.io.BufferedInputStream; import java.io.Buf

java _io_文件字符流输入

字符流读取数据不会产生乱码问题字节流读取数据可能会因为字符集不同,每个字符对应的字符大小不同而产生乱码/ Read read= new FileReader(File f);或路径 操作方法:除了流的选择改变和字节数组变成了字符数组,其他都一样 public class test{ public static void main(String[]args) { File f =new File("C:/Users/10853/eclipse-workspace/hell/src/hell/abc

【Java】IO流--文件字符流--FileReader、FileWriter

FileReader 作用:用于读取字符流 构造方法: FileReader(File file) 创建一个新的 FileReader ,给出 File读取. FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称. 常用方法: 1)int read();2)int read(char[] cbuf)3)int read(char[] cbuf,int off,int len);4) int available();5)close()

文件字符流 编码判断

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Web; namespace Wordsearch1{ public class FileEncoding { public FileEncoding() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 取得一个文本文件的编码

java _io_文件字符流输出

String s="ada";char[] a=s.toCharArray(); 将字符串转换成字符数组 public class test{ public static void main(String[]args) { File f =new File("D:d/write.txt"); Writer writer=null; try { writer=new FileWriter(f); //写法一 /*String s="adad afaff哈哈哈

Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色. int read();int read(byte b[]);int read(byt

文件操作的字节流和字符流

在java.io包中流的操作主要有字节流.字符流两大类,两类都有输入和输出操作.在字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类. 在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成. 这四个类都是抽象类,使用中需通过子类进行实例化(向上转型),或者直接使用子类进行io操作. 文件操作的字节流 FileOutputStream,FileInputStream.文件操作的字符流 FileWriter,FileReader. 一

FileInputStream(字节流)与fileReader(字符流) 的区别

FileInputStream 类 1 ) FileInputStream 类介绍: 以字节为单位的流处理.字节序列:二进制数据.与编码无关,不存在乱码问题. FileInputStream 类的主要方法有: Read (), read ( byte[] b ), read ( byte[],int off,int len ) ,available(); 2 ) FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象

FileInputStream 类与 FileReader 类的区别

FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileInputStream :以字节流方式读取: FileReader :把文件转换为字符流读入: InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别.用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组. Rea