2-字节流

package com.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.junit.Test;
/**
 *
 * @author Administrator
 *1、流的分类
 *(1)按照数据流向的不同,分为输入流和输出流
 *(2)按照处理数据单位的不同,分为字节流和字符流
 *(3)按照角色的不同,分为节点流(直接作用于文件,所有带File的InputStream OutputStream)、处理流(作用于节点流上面,提高效率)
 *2、IO体系
 *抽象基类                    节点流(即文件流)            缓总流(处理流的一种)
 *InputStream   FileInputStream         BufferedInputStream
 *OutputStream  FileOutputStream         BufferedOutputStream
 *Reader        FileReader                BufferedReader
 *Writer        FileWriter                BufferedWriter
 *3、所有的处理流都作用于上面四种节点流,才能进行对文件操作
 */
public class FileInputOurPutStreamTest {

    /**
     * 每次读一个字节
     */
    @Test
    public void fileInputStreamTest1(){
        FileInputStream fis = null;
        //1、先创建file对象
        try { //有异常在这里捕获,因为fis使用完后一定要关闭
            File file1 = new File("hello1.txt");
            //2、创建FileInputStream对象
            fis = new FileInputStream(file1);
            /**
            int b = fis.read();//read方法,一次读取一个字节,读到文件最后返回-1
            while(b != -1){
//                System.out.println(b);//因为读取的是字节,这里用int接收,所以打印出来是unicode码,要显示字母,加char强制转化
                System.out.println((char)b);
                b = fis.read();
            }**/
        //上面代码可以简写成
            int b ;
            while( (b = fis.read()) != -1 ){
                System.out.print((char)b);
            }
        } catch ( IOException e) {
            e.printStackTrace();
        }finally{
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 每次读一个数组长度的字节
     */
    @Test
    public void fileInputStreamTest2(){
        File file = new File("hello1.txt");
        FileInputStream fis = null;
        try{
            fis = new FileInputStream(file);
            byte[] b = new byte[5];
            int len;//len是每次读出放到数组中的字节数,当到文件末尾的时候返回-1,前几个len都返回的是数组的长度,最后一个返回的len<=数组长度
            StringBuffer strTmp = new StringBuffer("");
            while( (len = fis.read(b)) != -1 ){
                System.out.println(len);
                String str = new String(b, 0, len);//这里要注意new String的三个参数,第一个是数组,第二个是从数组的第几个下标开始读,最后一个,是最后一个数组的长度
                System.out.println(str);
                strTmp.append(str);
            }
            System.out.println("strTmp-===" + strTmp);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    public void fileOutPutStreamTest(){
        File file = new File("hello_out.txt");
        FileOutputStream fos = null;

        try{
            fos = new FileOutputStream(file);
            byte[] strTmp = new String("I love china").getBytes();
            fos.write(strTmp);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 从一个文件读取内容,写入到另外一个文件
     * 即文件的复制
     */
    @Test
    public void fileInputOutputStreamTest(){
        FileInputStream fis = null;
        FileOutputStream fos = null;
        File fileIn = new File("hello1.txt");
        File fileout = new File("hello2.txt");
        try{
            fis = new FileInputStream(fileIn);
            fos = new FileOutputStream(fileout);
            int len;
            byte [] b = new byte[20];//根据文件大小来设定数组的大小
            while((len = fis.read(b)) != -1){
                fos.write(b, 0, len);//0是从字节数组b的的第0位开始
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}
时间: 2024-08-03 10:51:42

2-字节流的相关文章

深入理解JAVA I/O系列二:字节流详解

流的概念 JAVA程序通过流来完成输入/输出.流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式.这样就意味一个输入流能够抽象多种不同类型的输入:从磁盘文件.从键盘或从网络套接字:同样,一个输出流可以输出到控制台.磁盘文件或相连的网络. 在我们平时接触的输入/输出流中,有这样一个概念必须要弄明白,何谓输入.何谓输出?讨论这个问题的前提是要知道以什么为参考物,这个参考物就是程序或者内存.输入:就是从磁盘文件或者网络等外部的

字节流

FileInputStream 构造方法 public FileInputStream(String filePathName) public FileInputStream(File file) 成员方法 public int read() ; 一次读取一个字节 public int read(byte[] bytes) ; 字节数组拷贝之available()方法 案例演示 int read(byte[] b):一次读取一个字节数组 write(byte[] b):一次写出一个字节数组 av

java之IO输出字节流相关操作

输出字节流: --------| OutputStream 是所有输出字节流 的父类. 抽象类 -----------| FileOutStream 向文件输出数据的输出字节流. FileOutputStream如何使用呢? 1. 找到目标文件 2. 建立数据的输出通道. 3. 把数据转换成字节数组写出. 4. 关闭资源 方法一: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; p

JAVA IO ( 字节流输入输出 )

<!--字节流 写 --> public class WriterDemo { public static void main(String[] args) { //实例化文件对象,文件不存在会自动创建,目录不存在会报错 File file = new File("src/文件字节流输入输出/text.txt"); try { //实例化文件流对象(参数:文件对象,是否追加,true向文件追加数据,false覆盖数据) FileOutputStream outputStre

java IO的字节流和字符流及其区别

1. 字节流和字符流的概念    1.1 字节流继承于InputStream    OutputStream,    1.2 字符流继承于InputStreamReader    OutputStreamWriter.在java.io包中还有许多其他的流,主要是为了提高性能和使用方便. 2. 字节流与字符流的区别    2.1 要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这

java-HttpGetPost-图片字节流上传

在java程序开发中经常用到与服务端的交互工作,主要的就是传递相应的参数请求从而获取到对应的结果加以处理 可以使用Get请求与Post请求,注意!这里的Get请求不是通过浏览器界面而是在程序代码中设置的,达到Get请求的目的,具体请详见下列描述 以下get与post请求需要引入的包: import java.io.IOException; import java.io.InputStream; import java.net.URLDecoder; import org.apache.commo

IO流(字节流)

一.File类的构造方法: File(String pathname) 指定文件或者文件夹的路径创建一个File文件. File(File parent, String child)   根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例. File(String parent, String child) 注意:在windows机器上 的目录分隔符是 \  ,在linux机器上的目录分隔符是/ . .   当前路径 .. 上一级路径 字节流: 字节流读取得都是

Java学习之IO字节流

字节流分为FileInputStream 和FileOutputStream 1 package com.io; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 import java.io.InputStream; 8 /** 9 * 文件字节流的读取 10 * @author ga

IO(Input Output)流___字符流、字节流

一.IO流简述------用于操作数据的 IO流用来处理设备之间的数据传输; Java对数据的操作是通过流的方式; Java用于操作流的对象都是在IO包中; 流按操作数据分为: 字节流(通用)和字符流: 按流向分为: 输入流和输出流. 字节流的抽象基类: InputStream , OutputStream 字符流的抽象基类: Reader, Writer 注: 由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀. 如: InputStream的子类FileInputStream :Re

字节流笔记

字节流笔记预存文档