编码表、字节流、字节缓冲流

概念: 

       字节流不需要刷新(byte)

    字符流需要刷新(char)

    IO流:input(通过Java程序往内存里读取) output(通过Java程序往硬盘上外写出) 输入输出流

* IO流的分类

*          按照操作的数据不同

*                 字节流:操作字节,由于计算机上一切皆是字节,字节流可以操作一切数据

*                 字符流:操作字符,只能操作文本文件

*                 文本文件:能使用文本工具 打开 看懂的叫做文本文件 txt java html xml css。(  world excel是文本文件吗? 不是文本)

*          按照流向分类

*                 字节流

*                        字节输入流  InputStream read  读一个字节 读一个字节数组

*                                      FileInputStream

*                                      BufferedInputStream

BufferedInputStream infile=new BufferedInputStrean(new FileInputStream("文件路径") );

*                        字节输出流 OutputStream write 写一个字节 写一个字节数组 写字节数组的一部分

*                                    FileOutputStream

*                                    BufferedOutputStream

*                 字符流

*                        字符输入流 Reader read 读一个字符  读一个字符数组

*                                    FileReader

*                                     BufferedReader

*                        字符输出流 Writer write 写一个字符 写一个字符数组 写字符数组的一部分 写字符串

*                                    FileWriter

*                                    BufferedWriter

* java.io.OutputStream 所有字节输出流的抽象超类

*           方法

*                        write(int b) 写一个字节

*                        write(byte[] byte) 写一个字节数组

*                        write(byte[] bytes,int offset, int length) 写字节数组的一部分

*                        close() 关闭资源

*

*          常用子类

*                         FileOutputStream

*                 构造方法绑定数据目的

*                        FileOutputStream(File file)

*                        FileOutputStream(String name)

*                 参数

*                        File对象

*                        String路径

*                        IO流对象本身没有读写功能,需要调用操作系统的读写功能 完成读写

*                         在调用后,需要关闭资源

文件的续写与换行

*   续写

*          FileOutputStream类的构造方法

*                 FileOutputStream(File file, boolean append)

*                 FileOutputStream(String name, boolean append)

*                 当参数 append为true时 则续写  为false则覆盖 不加append默认false

java.io.InputStream 所有字节输入流的超类

*          方法

*                        int read() 读一个字节

*                        int read(byte[] bytes) 读一个字节数组

*          常用子类

*                              FileInputStream

*                       构造方法绑定数据源

*                              FileInputStream(File file)

*                              FileInputStream(String name)

*                       参数

*                              File对象

*                              String路径

* int read(byte[] bytes) 读一个字节数组

*

*                 返回值

*                        int 读取的有效字节数(返回的是有效个数)

 java.io.BufferedOutputStream extends OutputStream 字节输出缓冲流

*                 可以使用所有OutputStream的方法  write 写一个字节 一个字节数组 一个字节数组的一部分

*   构造方法

*                        BufferedOutputStream(OutputStream out)

*                 参数

*                        OutputStream out:所有字节输出流的超类 ,抽象类不能创建对象,需要传入其子类对象

*                                                     FileOutputStream

 java.io.BufferedInputStream extends InputStream 字节输入缓冲流

*                 可以使用所有InputStream的方法 read 读一个字节 读一个字节数组

*   构造方法

*                 BufferedInputStream(InputStream in)

*          参数

*                 InputStream in:所有字节输入流的超类,抽象类不能创建对象 ,需要传入其子类对象

*                                         FileInputStream

java.util.Properties extends Hashtable  implements Map

*          键和值都是字符串类型 唯一一个可以和IO流直接结合使用的集合

*

*   方法

*                 setProperty(String key,String value) 添加元素  put(K key ,V value)

*                 String getProperty(String key) 根据键找值

*                 Set<String> stringPropertyNames() 获取所有键的set集合

<读取文件>和IO流结合使用

*                      load(InputStream in) 将文件中的键值对加载进集合

*                 load(Reader in)

*         参数  任意输入流对象

<写入文件>

*                       store(OutputStream out ,String com) 将集合中的数据 写入到配置文件中

*                       store(Writer out ,String com)

*         参数  任意输出流对象

<复制文件例子复制(H:\\删除添加练习使用文件1)到(H:\\删除添加练习使用文件2)>

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class CopyDir {

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

File src = new File("H:\\删除添加练习使用文件1");

File dest = new File("H:\\删除添加练习使用文件2");

copyDir(src,dest);

}

public static void copyDir(File srcDir,File destDir) throws IOException{

//确定文件夹的数据源和数据目的

//获取数据源的文件夹名称

String srcDirName = srcDir.getName();

//确定文件夹的数据目的

//使用数据目的+数据源的文件夹名称 拼出最终的数据目的

File destDir2 = new File(destDir,srcDirName);

System.out.println("--------复制文件--------------");

if(srcDir.isDirectory()){

//创建数据目的文件夹

destDir2.mkdirs();

//获取数据源文件夹的所有文件

File[] srcFileArr = srcDir.listFiles();

//遍历数组 依次获取到每个数据源文件

for(File srcFile: srcFileArr){

//确定数据目的的文件

//获取数据源的文件名

if(srcFile.isDirectory()){

copyDir(srcFile, destDir2);

}else{

String srcFileName = srcFile.getName();

//使用数据目的的文件夹 + 源文件的文件名 确定数据目的的文件

File destFile = new File(destDir2,srcFileName);

//复制文件

copy(srcFile,destFile);

}

}

}else{

String srcFileName = srcDir.getName();

//使用数据目的的文件夹 + 源文件的文件名 确定数据目的的文件

File destFile = new File(destDir2,srcFileName);

//复制文件

copy(srcDir,destFile);

}

}

public static void copy(File src,File dest) throws IOException{

//创建字节缓冲输入流对象,绑定字节输入流,绑定数据源

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));

//创建字节缓冲输出流对象,绑定字节输出流,绑定数据目的

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));

byte[] bytes = new byte[1024];

int len = 0;

while((len = bis.read(bytes))!=-1){

bos.write(bytes, 0, len);

}

//关闭资源

bos.close();

bis.close();

}

}

<文件复制例子二>

package Test_03_03;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileFilter;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.HashMap;

import java.util.Random;

import java.util.Scanner;

import java.util.Set;

/*

* 从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.

提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,

另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可.

*/

public class Test {

static int sum=0;

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

Scanner sc=new Scanner (System.in);

System.out.println("请输入要访问的文件目录:");

String str=sc.nextLine();

//根据输入的目录创建文件

File file1=new File(str);

File file2=new File("H:\\删除添加练习使用文件2");

file2.mkdirs();

copyPath(file1,file2);

}

//文件路径复制

public static void copyPath(File file1,File file2) throws IOException{

if(file1.isDirectory()){

File[] file=file1.listFiles(new FileFilter(){

@Override

public boolean accept(File pathname) {

//判断如果是以

if(pathname.getName().endsWith(".java")||pathname.isDirectory()){

return true;

}

return false;

}

});

//如果是文件夹添加后遍历进行文件存储

for (File file3 : file) {

if(file3.isDirectory()){

copyPath(file3,file2);

}else{

String str2=file3.getName();

File file11=new File(file2,str2);

//如果同名随机一个名字递归直到不重名

while(file11.exists()){

file11 = new File(file2,new Random().nextInt(100000) + str2);

}

//file11.mkdir();

System.out.println(file11);

copy(file3,file11);

}

}

}else{

if(file1.getName().endsWith(".java")){

String str2=file1.getName();

File file11=new File(file2,str2);

copy(file1,file11);

}else{

System.out.println("你输入的不是文件夹:");

}

}

}

public static void copy(File file1,File file2) throws IOException{

//创建文件高效写流

BufferedOutputStream outfile=new BufferedOutputStream(new FileOutputStream(file2));

//创建文件高效读取流

BufferedInputStream infile=new BufferedInputStream(new FileInputStream(file1));

byte[] b=new byte[1024];

int len=0;

while((len=infile.read(b))!=-1){

outfile.write(b,0,len);

}

outfile.close();

infile.close();

sum++;

}

}

按照流向分:输入流与输出流,每个IO流对象均要绑定一个IO资源

分类关系如下:

字节输入流 InputStream 抽象类

FileInputStream 操作文件的字节输入流

字节输出流 OutputStream 抽象类

FileOutputStream 操作文件的字节输出流

字符输入流 Writer写入字符流的抽象类

FlieWriter操作文件的字符输入流

字符输出流 Reader用于读取字符流的抽象类

FileReader操作文件的字符输入流

缓冲流,根据流的分类分类字节缓冲流与字符缓冲流。

字节缓冲流:BufferedInputStream

BufferedOutputStrea

字符缓冲流:BufferedReader

BufferedWriter

<字节流不需要刷新字符流需要>

按照传输方式:分为字节流和字符流

字符流  按照字符的方式读写

字节流  按照字节的方式读写

定义一个缓冲区提高效率

字节型 byte[]  bytes=new byte[1024];

字符型 char[]  ch=new char[1024];

原文地址:https://www.cnblogs.com/JunQiang-Ma/p/9962442.html

时间: 2024-10-12 16:12:46

编码表、字节流、字节缓冲流的相关文章

Java IO 过滤流 字节缓冲流 BufferedInput/OutputStream

Java IO 过滤流 字节缓冲流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是FilterInput/OutputStream的子类. BufferedInputStream工作流程 stream-->buf--read buf-->I 1.当一个BufferedInputStream被创建时,一个内部的缓冲区 byte[] buf = new byte[size]

java _io_字节缓冲流(装饰器)输入、输出

*装饰模式 字节缓冲流 BufferedInputStream bis=new BufferedInputStream(inputStream is) BufferedOutputStream bos=new BufferedOutputStream(OutputStream os) 最底层一定是节点流 只需要释放最外层的处理流,若要手动关闭遵循从里到外的顺序关闭(从字节流到处理流) 默认为8k,可以改变//参数是字节输入流对象InputStream is =new BufferedInputS

字节缓冲流 ( BufferedInputStream / BufferedOutputStream)

package com.sxt.reader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /* * 字节缓冲流 * BufferedI

java字节缓冲流和字符缓冲流

一.字节缓冲流 1.介绍 字节缓冲流根据流的方向,分为: 1.写入数据到流中,字节缓冲输出流 BufferedOutputStream 2.读取流中的数据,字节缓冲输入流 BufferedInputStream 它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度 2.字节缓冲输出流BufferedOutputStream 构造方法: public BufferedOutputStream(OutputStream out):创建一个新的缓冲输出流,以将数据写入指定的底层输

IO(三)IO流之字节流与字节缓冲流(转)

在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流. 一.InputStream中的读取数据的方法如下: 1 .int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾. 2.int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如果返回-

IO流 - 复制文件(字节缓冲流+字节流)

一.什么是缓冲流 缓冲流的内部都包含一个缓冲区,通过缓冲区读写,可以提高了IO流的读写速度. 二.缓冲流+字节流复制文件 //明确数据源 FileInputStream fis=new FileInputStream("D:\\java1018\\buffer.txt"); //明确目的地 FileOutputStream fos=new FileOutputStream("D:\\java1018\\a\\buffer2.txt"); //创建缓冲流对象 //输入

Java之 IO流、字符流、字节流、缓冲流、对象流等各种流

File类:使用Java进行操作文件,通过一些方法进行操作.比如创建文件,删除文件,判断是否存在,文件大小,文件的目录等等,还有文件夹的一些操作. IO流:根据类别可以进行分类. 按照流向:输入流Input 输出流Output 按照字节个数:字节流和字符流 字节流: InputStream:抽象类,无法直接使用,通过其子类FileInputStream,从文件中获取字节. OutputStream:抽象类,无法直接使用,通过其子类FileOutputStream,向文件写入字节. 字符流: Re

IO流(二):字节流及其缓冲流

一.IO概述 1.分类 1) 流向: 输入流 读取数据 输出流 写出数据 2)  数据类型: 字节流 字节输入流 读取数据 InputStream 字节输出流 写出数据 OutputStream 字符流  字符输入流 读取数据 Reader 字符输出流 写出数据 Writer 注意: 一般我们在探讨IO流的时候,如果没有明确说明按哪种分类来说,默认情况下是按照数据类型来分的. 每种基类的子类都是以父类名作为后缀名. XxxOutputStream XxxInputStream XxxReader

字节缓冲流 BufferedOutputStream BufferedInputStream

/*缓冲流:读取数据大量的文件时,读取的速度慢java提供了一套缓冲流 提高io流的效率 * */ package cn.lijun.demo; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; /* * 字节输入流的缓冲流 * 继承InputStream * 构造方法 */ public class BufferedInputStre