概念:

InputStream类是字节输入流的抽象类,是所有字节输入流的父类。

OutputStream类是字节输入流的抽象类,是所有字节输出流的父类。

In(可以理解为读)Out(可以理解为写)

一、字节流的读与写

FileInputStream类与FileOutStream类都是用来操作磁盘文件的。

1.

FileInputStream(String name); 填String类型的路径名

FileInputStream(File file); 填入File对象

2.

FileOutStream(String name); 填String类型的路径名

FileOutStream(File file); 填入File对象

实例如下:

package com.inba.maya.liu;
import java.io.*;
public class TextSteram { public static void main(String[] args) throws Exception{
//读,字节流
String s="g:\\aaa.txt";
File f=new File(s); FileInputStream fs=new FileInputStream(f);
//byte[] b=new byte[10000];在字节流中既可以自定义长度,也可以用对象.length,但注意一定要转换成int类型 byte[] b=new byte[(int)f.length()];1
fs.read(b);
fs.close(); String str=new String(b);
System.out.println(str); //写,字节流
/*//查文档
String str="66666";
String s="g:\\bbb.txt";
File f=new File(s);
FileOutputStream fos=new FileOutputStream(f);
byte[] b=str.getBytes();
fos.write(b);
fos.close();
*/ /*
String str="\r\n7777777";
String s="g:\\bbb.txt";
FileOutputStream fos=new FileOutputStream(s,true);
byte[] b=str.getBytes();
fos.write(b);
fos.close();
*/ /*
* FileInputStream(f),写
* FileInputStream(f,true),追加
* FileInputStream(s); 写
* FileInputStream(s,true); 追加
*
* FileOutputStream(s); 写
* FileOutputStream(s,true); 追加
* FileOutputStream(f),写
* FileOutputStream(f,true),追加
* */
}
}

二、字符流读与写

为什么要使用字符流以及字符流与字节流有什么不同:

使用FileOutStream类向文件中写入数据与使用FileInStream类读取文件中的数据,存在一点不足,即这两种类只能提供字节或字节数组的读取方式,由于汉字在文件中占用两个字节,如果使用字节流,读取不好会出现乱码现象,此时就需要采用字符流FileReader和FileWriter类就会避免这种现象。

用到的方法:read();读 、 write();写

同样的FileReader和FileWriter,也加载了两个构造函数,可以直接填写字符串类型的路径,也可以填写File对象;

1.

FileReade(String fileName); 填String类型的路径名

FileReade(File file); 填入File对象

2.

FileWriter(String fileName); 填String类型的路径名

FileWriter(File file); 填入File对象

实例:

package com.inba.maya.liu;

import java.io.*;
import java.util.*;
public class TextZiFu { public static void main(String[] args) throws Exception{
//读,字符流不能用.length String s="g:\\aaa.txt";
File f=new File(s);
FileReader fr=new FileReader(f);
char[] c=new char[5000];
fr.read(c);
fr.close();
String str=new String(c);
System.out.println(str); //写字符流
/*
String s="g:\\qqq.txt";
FileWriter fw=new FileWriter(s,true); fw.write("\r\n9999999");
fw.close();
*/
}
}

三、带缓存的输入输出流

缓存可以说是I/O的一种性能优化,缓存流为I/O流增加了内存缓存区。有了缓存去,使得在流上执行skip();mark();reset();方法成为可能

BufferedInputStream类(读缓存流)可以对任意的InputStream类进行带缓存区的包装以达到性能的优化。(所以一般是用于包装字节流的!)

同样的BufferedInputStream类与BufferedOutputStream类都有两个构造函数;

1.

BufferedInputStream(输入流)

BufferedInputStream(输入流 , int size); size:按照指定大小创建缓存区

2.

BufferedOutputStream(输出流)

BufferedOutputStream(输出流 , int size); size:按照指定大小创建缓存区

实例:

package com.inba.maya.liu;

import java.io.*;
import java.util.*;
public class TextZiFu { public static void main(String[] args) throws Exception{ //读,缓存流
/*
String s="g:\\aaa.txt";
File f=new File(s);
FileInputStream fis=new FileInputStream(s); BufferedInputStream bis=new BufferedInputStream(fis);
byte[] b=new byte[(int)f.length()];
bis.read(b); bos.close();//一定要先关缓存流
fos.close();//再关流 String str=new String(b);
System.out.println(str);
*/ //写,缓存流
String s="g:\\qqq.txt"; FileOutputStream fos=new FileOutputStream(s,true);
BufferedOutputStream bos=new BufferedOutputStream(fos);
String str="\r\n1111111";
byte[] b=str.getBytes();
bos.write(b);
bos.flush();//写的时候调用一下flush();彻底完成输入并清除缓存区
bos.close();//一定要先关缓存流
fos.close();//再关流
}
}

四、用scanner读取数据:

package com.inba.maya.liu;
import java.io.*;
import java.util.*;
public class TextZiFu { public static void main(String[] args) throws Exception{
/*
String s="g:\\aaa.txt";
File f=new File(s);
Scanner sc=new Scanner(f); //hasNextLine:如果在此扫描器的输入中存在另一行,则返回 true
while(sc.hasNextLine()){
System.out.println(sc.nextLine());
}
sc.close();
*/ // 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder sb=new StringBuilder();
String s="g:\\aaa.txt";
File f=new File(s);
Scanner sc=new Scanner(f);
while(sc.hasNextLine()){
sb.append(sc.nextLine()+"\r\n");
}
sc.close();
System.out.print(sb);
}
}

字符流;字节流;带缓冲的输入输出流;以及用scanner读文件的更多相关文章

  1. (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter

    字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...

  2. Java IO流学习总结一:输入输出流

    Java IO流学习总结一:输入输出流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自[赵彦军的博客] J ...

  3. C++标准程序库的输入输出流(I/O Stream)复制文件(4种方法)

    使用C++标准程序库的输入输出流(I/O   Stream)复制文件,存在许多的方法, 方法一:逐个字符复制#include   <   fstream   > std::ifstream ...

  4. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  5. java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式

    字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...

  6. 字符流,字节流,属性集(Properties)

    字节输入流(InputStream) java.io.InputStream抽象类是表示字节输入流的所有类的超类.可以读取字节信息到内存中.它定义了字节输入流的基本共性功能方法. public voi ...

  7. Java基础 FileReader-FileWriter / 缓冲字符输入输出流 / 缓冲字节输入输出流 三种方式 进行文本文件的复制

    易错的地方: /** 出错的地方: * 1.缓冲流儿输出时,务必:flush();不然可能输出不尽! * 2. bw缓冲字符输出流,记得这里! bw.write(b,0,len); * 3.字符流不能 ...

  8. Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式

    输出字符流 Writer  所有输出字符流的基类,  抽象类. FileWriter 向文件输出字符数据的输出字符流. BufferedWriter 缓冲输出字符流        缓冲输出字符流作用: ...

  9. java 字符流 字节流

    java对文本文档进行操作(拷贝.显示)出现乱码一般来说,可以从两个方面入手. 1.文本文件本身的编码格式. 2.java代码中处理文本文件的编码格式. 这里要注意的一点是,我们可以看出copyFil ...

随机推荐

  1. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

  2. python 下的数据结构与算法---7:查找

    一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...

  3. 配置Windows Server 2008 允许多用户远程桌面连接

    开启远程桌面后,远程访问windows server 2008服务器时,默认只支持一个用户名同时只能创建一个远程连接,新建连接登录后会将前一个就踢掉,有没有办法像windows server 2005 ...

  4. Oracle数据库锁表的查询方法以及解锁的方法

    1,锁表语句简单查询方法   select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session ...

  5. MyEclipse汉化后问题

    今天为了教学生如何汉化MyEclipse10.7,所以讲IDE汉化了一下. 个人还是喜欢用英文版,所以就将D:\MyEclipse\MyEclipse 10目录下的配置文件myeclipse.ini里 ...

  6. (三)Knockout - ViewModel 的使用2 - select、list 应用

    select下拉菜单 <select>常用的data-bind参数: •options : 指向数组或ko.observableArray(),KO会将数组元素转换为下拉选项.如果是ko. ...

  7. 武汉科技大学ACM:1007: 不高兴的津津

    Problem Description 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她 报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一 ...

  8. 转载自php100中文网 centos下lamp 环境搭建

    学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一. ...

  9. django初探

    如果是自己建站耍的话,还是用Php方便,毕竟Php服务器便宜又到处都是. 但是python毕竟是一个新鲜的东西,特别是django,以前一直东python的语法,而且是我最早学习的语言之一,但是一直停 ...

  10. prototype原型属性

    <script type="text/javascript"> /* 需求:想把getMax与searchEle方法添加 到数组对象中. functoin Array( ...