java学习笔记 OutputStream与InputStream

流是用来读写传输数据的,输入和输出是对程序本身而言的,但程序需要读入数据用读入流,程序需要将数据输出保存起来用输出流。

流相当于各种不同的管道来传输数据。按读入和输出分为输入流和输出流。按传输的类型分为字节流和字符流。按管道与管道的关系又可分为节点流与处理流。

字节流中输出使用OutputStream类输入使用InputStream类。

在java中流的操作分为下面4个步骤:

  1. 使用File类打开一个文件
  2. 通过流的子类来指定位置
  3. 进行输入或输出操作
  4. 关闭输入/输出

字节流

字节输出流:OutputStream

OutputStream类是抽象类,其子类FileOutputStream

向一个文件中写入字符串:

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

public class Test {
    public static void main(String[] args) {
        try {
            //在io.txt中写入Hello Word!
            OutputStream fos = new FileOutputStream("e:\java\io.txt");//FileOutputStream的FileOutputStream(String name)构造方法
            //(FileOutputStream fos = new FileOutputStream(f);String str = "e:\java\io.txt";File f = new File(str);)
            String str = "Hello Word!";
            byte b[] = str.getBytes();//Byte 还是byte?@getBytes
            //将一个数组直接写入文件当中
            fos.write(b);
            /*
            //通过循环把每一个字节写入文件中
            for(int i = 0;i < b.length;i++) {
                fos.write(b[i]);    
            }
            */
            fos.close();
        }catch(IOException e) {
            e.printStackTrace();    
        }
    try {
            //在io.txt中追加写入Hello Word!
            OutputStream fos = new FileOutputStream("e:\java\io.txt",true);//FileOutputStream的FileOutputStream(String name, boolean append)构造方法
            String str = "
Hello Word!";// 
归位转义字符的用法?
            byte b[] = str.getBytes();
            fos.write(b);//最后文件写入两行Hello Word!
            fos.close();
        }catch(IOException e) {
            e.printStackTrace();    
        }    
    }    
}

r1

字节输入流InputStream

InputStreamStream是抽象类,其子类FileInputStream

从文件中读取类容

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

public class Test {
    public static void main(String[] args) {
        try{
            FileInputStream in = new FileInputStream("e:\java\io.txt");
            int b;
            while((b = in.read()) != -1) {
                System.out.print((char)b);    
            } 
            in.close();   
        }catch(IOException e) {
            e.printStackTrace();
        }
    }    
}

r2

以数组的形式读取类容

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

public class Test {
    public static void main(String[] args) {
        try{
              //读取1KB内容
            FileInputStream in = new FileInputStream("e:\java\io.txt");
            byte b[] = new byte[1024];//读入1KB;
            in.read(b);
            in.close();
            System.out.print("读入内容:
" + new String(b));   
        }catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println(" ");
        try{
              //读取指定文件字节个内容
            FileInputStream in = new FileInputStream("e:\java\io.txt");
            File f = new File("e:\java\io.txt");
            int a = (int)f.length();//public long length()
            byte b[] = new byte[a];
            in.read(b);
            in.close();
            System.out.print("读入内容:
" + new String(b));   
        }catch(IOException e) {
            e.printStackTrace();
        }
        
    }    
}

/*
1.数据存储单位大小:
    1 Byte = 8 Bits
    1 KB = 1024 Bytes
    1 MB = 1024 KB
    1 GB = 1024 MB
2.byte b[] = new byte[a]中开辟空间的大小必须使用int类型的。不能用double类型。
*/

r3

复制文件内容

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

public class Test {
    public static void main(String[] args) {
        //可以读取.java类型文件,下面是两种路径写法
        String str1 = "e:" + File.separator + "java" + File.separator + "pkg1" + File.separator + "Test.java";//String str = "e:\java\pkg1\Test.java";
        try {
            File f1 = new File(str1);    
            FileInputStream fis = new FileInputStream(f1);
            int b;
            while((b = fis.read()) != -1) {
                System.out.print((char)b);
            }    
            //是否应该关闭这个流?@应该的
            fis.close();
        }catch(IOException e) {
            e.printStackTrace();    
        }
        
        //把上个文件按字节流形式复制到另一文件
        try {
            String str2 = "e:\java\pkg1\aaa.txt";//如果这个路径文件夹不存在  能否自己创建?@不能自己创建
            //String str2 = "e:\java\AAAA\aaa.txt";
            File f1 = new File(str1);    
            File f2 = new File(str2);    
            FileInputStream fis = new FileInputStream(f1);
            FileOutputStream fos = new FileOutputStream(f2);
            int b;
            while ((b = fis.read()) != -1) {
                fos.write(b);    
            }
            fis.close();fos.close();
        }catch (IOException e) {
            e.printStackTrace();    
        }
    }
}    

/*
1.所有的异常都需要引用import,例如上面的import java.io.IOException
2.main主方法不应该抛异常,试想main方法已经是最后一个方法了
3.流进行读写操作之后应该关闭,例如fis.close()
*/
r4

在屏幕上中文并不能正确显示

r5

实际文件可以正确复制

原文地址:https://www.cnblogs.com/yhwsy/p/5749078.html