一:介绍

1.两种基类

  字节流

    InputStream,OutputStream

  字符流

    Reader,Writer

二:字符流的基本方法(文字的处理比较常见)

1.Writer的API

  

2.FileWriter

  

  

3.程序

 import java.io.FileWriter;
public class Test82 {
public static void main(String[] args)throws Exception {
FileWriter fw=new FileWriter("Demo1.txt");
fw.write("\r\nqqqqqqqqqqqqqq\r\nbbbb");
fw.flush();
fw.close();
}
}

4.效果现象

  

5.IO的专业处理方式

  注意点:FileWriter中的类放在外部定义。

finall中需要判读FileWriter是否为空,因为可能创建失败,就不存在流,也不需要关。

 import java.io.FileWriter;
public class Test83 {
public static void main(String[] args) {
FileWriter fw=null;
try{
fw=new FileWriter("Demo2.txt");
fw.write("hhhhh");
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
try{
if(fw!=null)
fw.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}

6.文件续写

  注意:传递一个true参数,代表对已有的文件不进行覆盖,而是在文件的末尾处进行续写。

     如果没有文件,则新建文件。

 import java.io.FileWriter;
public class Test82 {
public static void main(String[] args)throws Exception {
FileWriter fw=new FileWriter("Demo1.txt",true);//boolean为true
fw.write("\r\nqqqqqqqqqqqqqq\r\nbbbb");
fw.flush();
fw.close();
}
}

7.效果

  

8.Reader的API

  

9.FileReader

  

  

10.读取单个字符(判读条件是读入的字符)

 import java.io.FileNotFoundException;
import java.io.FileReader;
public class Test84 {
public static void main(String[] args) throws Exception {
FileReader fr=new FileReader("Demo1.txt");
int num=0;
while((num=fr.read())!=-1){
System.out.print((char)num);
}
}
}

11.效果

  

12.读取数组(判断条件是字符个数)

  注意点:print不要带ln,因为数据查过1024时,数据对从下一行开始打印。

 import java.io.FileReader;
public class Test85 {
public static void main(String[] args)throws Exception {
FileReader fr=new FileReader("Demo1.txt");
char[] buf=new char[1024];
int len=0;
while((len=fr.read(buf))!=-1){
System.out.print(new String(buf,0,len));
}
fr.close();
}
}

13.效果

  

14.复制(文本的复制)

  注意点:写入的方法是数组写入。

 import java.io.FileReader;
import java.io.FileWriter;
public class Test86 {
public static void main(String[] args) {
copy();
}
private static void copy(){
FileWriter fw=null;
FileReader fr=null;
try{
fw=new FileWriter("Demo1_copy.txt");
fr=new FileReader("Demo1.txt");
char[] buf=new char[1024];
int len=0;
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
}catch(Exception e){
System.out.println("error"+e.toString());
}finally{
if(fr!=null)
try{
fr.close();
}catch(Exception e){
System.out.println("error fr close");
}
if(fw!=null)
try{
fw.close();
}catch(Exception e){
System.out.println("error fw close");
}
}
}
}

15.效果

  

三:字符流的缓冲(实际中的使用)

1.BufferedWriter API

  

2.newLine的使用

 import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class Test87 {
public static void main(String[] args) throws IOException{
FileWriter fw=new FileWriter("Demo2.txt");
BufferedWriter bufw=new BufferedWriter(fw);
for(int i=0;i<7;i++){
bufw.write("abggf");
bufw.newLine();
bufw.flush();
}
bufw.close();
}
}

3.BufferedReader方法

  多了一个方法

  

4.程序readLine的使用

  注意点:读取的时候,不读取行终止符

          所以打印的时候,要加上换行符

 import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Test88 {
public static void main(String[] args) throws IOException{
FileReader fr=new FileReader("Demo2.txt");
BufferedReader bufr=new BufferedReader(fr);
String line=null;
while((line=bufr.readLine())!=null){
System.out.println(line);
}
}
}

5.效果

  

6.复制

  注意点:使用readLine的方法时,要加上换行newLine方法。

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class Test89 { public static void main(String[] args) {
BufferedReader bufr=null;
BufferedWriter bufw=null;
try{
bufr=new BufferedReader(new FileReader("Demo2.txt"));
bufw=new BufferedWriter(new FileWriter("BufferedDemo2.txt"));
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line); //写入的是String方法
bufw.newLine();
bufw.flush();
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(bufw!=null){
try{
bufw.close();
}catch(Exception e){
e.toString();
}
}
if(bufr!=null){
try{
bufr.close();
}catch(Exception e){
e.toString();
}
}
}
} }

7.效果

  

8.LineNumberReader--其为BufferedReader的装饰修饰类

  

9.程序

 import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class Test90 {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("Demo2.txt");
LineNumberReader lineReader=new LineNumberReader(fr);
String line=null;
while((line=lineReader.readLine())!=null){
System.out.println(lineReader.getLineNumber()+":"+line);
}
}
}

10.效果

  

四:字节流的基本方法

1.OutputStream的使用

 import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class Test91 {
public static void main(String[] args) throws IOException {
outputS();
}
public static void outputS()throws IOException{
FileOutputStream fo=new FileOutputStream("Demo3.txt");
//将字符传转换为字节数组,进行写入
fo.write("yusbcjsbdcjksb".getBytes());
fo.close();
} }

2.效果

  

3.读取InputStream方法(一个一个的读取)

 import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Test92 {
public static void main(String[] args) throws IOException{
inputS();
}
public static void inputS() throws IOException{
FileInputStream fi=new FileInputStream("Demo2.txt");
int num=0;
while((num=fi.read())!=-1){
System.out.print((char)num);
}
}
}

4.效果

  

5.读取InputStream方法(数组的读取)

 import java.io.FileInputStream;
import java.io.IOException; public class Test93 {
public static void main(String[] args) throws IOException{
inputS();
}
public static void inputS() throws IOException{
FileInputStream fi=new FileInputStream("Demo2.txt");
byte[] fb=new byte[1024];
int len=0;
while((len=fi.read(fb))!=-1){
System.out.println(new String(fb,0,len));
}
}
}

6.效果

  

7.复制图片

 import java.io.FileInputStream;
import java.io.FileOutputStream; public class Test94 {
/**
* copy picture
* @param args
*/
public static void main(String[] args) {
copyPicture();
}
public static void copyPicture(){
FileInputStream fi=null;
FileOutputStream fo=null;
try{
fi=new FileInputStream("me1.jpg");
fo=new FileOutputStream("me1_copy.jpg");
byte[] fb=new byte[1024];
int len=0;
while((len=fi.read(fb))!=-1){
fo.write(fb, 0, len);
} }catch(Exception e){
e.toString();
}finally{
if(fi!=null){
try{
fi.close();
}catch(Exception e){
e.toString();
}
}
if(fo!=null){
try{
fo.close();
}catch(Exception e){
e.toString();
}
}
}
} }

五:字节流的缓存

1.复制图片

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test95 {
/**
* copy picture with cache
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedInputStream bufi=new BufferedInputStream(new FileInputStream("me1.jpg"));
BufferedOutputStream bufo=new BufferedOutputStream(new FileOutputStream("me1_copy2.jpg"));
int num=0;
while((num=bufi.read())!=-1){
bufo.write(num);
bufo.flush();
}
bufi.close();
bufo.close();
}
}

2.键盘录入

 import java.io.IOException;
import java.io.InputStream;
public class Test96 {
public static void main(String[] args) throws IOException {
InputStream ins=System.in;
StringBuilder sb=new StringBuilder();
while(true){
int ch=ins.read();
if(ch=='\r'){
continue;
}
if(ch=='\n'){
String s=sb.toString();
if(s.equals("over"))
break;
System.out.println(s.toUpperCase());
sb.delete(0, sb.length());
}else{
sb.append((char)ch); //将字母存入
}
} } }

3.结果

  

六:转换流

1.需求一(字节流转换成字符流)

  键盘的录入时,是一行一行的录入,但是键盘录入时InputStream,读取一行的方法是BufferedReader中的readLine方式。

因此,需要一个转换流,将字节流转换成字符流。

  

  

2.程序

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; public class Test97 { public static void main(String[] args) throws IOException {
InputStream in=System.in;
InputStreamReader insr=new InputStreamReader(in);
//use buffer
BufferedReader bufr=new BufferedReader(insr);
String line=null;
while((line=bufr.readLine())!=null){
if(line.equals("over")){
break;
}
System.out.println(line.toUpperCase());
}
}
}

3.结果

  

4.需求二(字符流转换成字节流)

  当字符想保存到硬盘上时,就是字符转换成字节流。

  

  

5.程序

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Test98 {
public static void main(String[] args) throws Exception {
//in
InputStream in=System.in;
InputStreamReader insr=new InputStreamReader(in);
BufferedReader bufr=new BufferedReader(insr);
//out
OutputStream out=System.out;
OutputStreamWriter outs=new OutputStreamWriter(out);
BufferedWriter bufw=new BufferedWriter(outs);
//
String line=null;
while((line=bufr.readLine())!=null){
if(line.equals("over"))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}

七:其他知识点

1.改变标准输入输出设备(其中输入的一种改变被注释了)

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream; public class Test99 {
public static void main(String[] args) throws Exception {
//change
//System.setIn(new FileInputStream("Demo2.txt"));
System.setOut(new PrintStream("change.txt"));
//in
InputStream in=System.in;
InputStreamReader insr=new InputStreamReader(in);
BufferedReader bufr=new BufferedReader(insr);
//out
OutputStream out=System.out;
OutputStreamWriter outs=new OutputStreamWriter(out);
BufferedWriter bufw=new BufferedWriter(outs);
//
String line=null;
while((line=bufr.readLine())!=null){
if(line.equals("over"))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}

2.效果

  

  

3.将日志由控制台的打印转到文件中

 import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date; public class Test100 {
public static void main(String[] args) {
try
{
int[] arr = new int[2];
System.out.println(arr[3]);
}
catch (Exception e)
{
try
{
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
PrintStream ps = new PrintStream("exception.log");
ps.println(s);
System.setOut(ps);
}
catch (IOException ex)
{
throw new RuntimeException("日志文件创建失败");
}
e.printStackTrace(System.out);
}
}
}

4.效果

  

5.打印系统信息

 import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Properties;
public class Test101 {
public static void main(String[] args) throws Exception {
Properties pro=System.getProperties();
//
pro.list(new PrintStream("hui.txt"));
}
}

6.效果

  

  

IO知识点整理(四种基类的使用)的更多相关文章

  1. IO知识点整理(文件File类的使用)

    一: 1.API 2.构造函数的程序 注意这集中构造函数的特点. 同时,字段separator的使用. import java.io.File; public class Test101 { publ ...

  2. python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...

  3. a链接四种伪类状态切换实现人机交互

    常见的color, font-family, background 等css属性都能够设置链接的样式,a链接的特殊性在于能够根据它们所处的状态来设置它们的样式.a标签与人交互的4个状态属于伪类状态切换 ...

  4. IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)

    一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...

  5. 【CSS学习笔记】a标签的四种伪类

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  6. EffectiveJava(22)JAVA四种嵌套类的特点及用法

    嵌套类: 1.静态成员类 静态成员类是外围类的一个静态成员,遵守同样的可访问性规则 用法:a.作为公有的辅助类 内部类: 2.非静态成员类 语法上只和静态成员类的唯一区别是少一个static修饰符 a ...

  7. a:link a:visited a:hover a:active四种伪类选择器的区别

    a:link选择网页中所有没有被visited的a标签,就是没有鼠标悬停hover或者点击click(a链接没有被访问时的样式) a:visited选择网页中所有已经被click的a链接,用来告诉用户 ...

  8. 关于IO的整理

    我们知道io只是输入输出,在java语言中分为同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO,现在的IO,一般是用作两种用途:一种是进行文件或者目录的操作(将不同的输入输出源抽象成流,所以流 ...

  9. 求职之C++小知识点整理

    1.顺序容器 1.顺序容器:vector,deque,list,forward_list,array,string.其中除list和forward_list外,其它都支持快速随机访问. deque a ...

随机推荐

  1. 【BZOJ1484】[HNOI2009]通往城堡之路 (贪心)

    [BZOJ1484][HNOI2009]通往城堡之路 (贪心) 题面 BZOJ 洛谷 题解 我大概是不会的. 大概是,首先把所有的人全部弄成最低的值,再一次次拔高一个后缀. 其他的全是抄的,百度随便找 ...

  2. 'sudo'不是内部或外部命令,,,,的解决办法

    [说明] Windows系统从 Vista 版本开始加入了 UAC 机制,这导致没有足够权限的程序无法获取到一些关键资源.在 Linux 下我们可以使用 sudo 命令方便地提升当前程序的执行权限,但 ...

  3. PyQt4 安装

    安装PyQt4很简单,从官网下载相应的安装包即可. 需要注意的是:应该根据你电脑上已经装好的python版本选择相应的PyQt4安装包. PyQt4的安装目录一定要选python的安装目录,比如我的P ...

  4. boost::unique_lock和boost::lock_guard的区别

    lock_guard unique_lock boost::mutex mutex; boost::unique_lock<boost::mutex> lock(mutex); std:: ...

  5. 使用solrJ操作solr常用方法 【注释非常详细,非常好】

    转: 使用solrJ操作solr常用方法 2017年08月07日 22:49:06 成都往右 阅读数:8990   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

  6. C++原型模式和模板模式

    DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.其中有一个词很重要,那就是拷贝.可以说,拷贝是原型模式的精髓所在.举个现实中的例子来介绍原型模式.找工作的时候,我们需 ...

  7. OpenStack 存储服务 Cinder存储节点部署NFS(十七)

    Cinder存储节点部署 1.安装软件包 yum install -y nfs-utils rpcbind 提示:早期版本安装portmap nfs-utils :包括基本的NFS命令与监控程序 rp ...

  8. [机器学习]-SVD奇异值分解的基本原理和运用

    SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...

  9. RESTful记录-RESTful介绍

    RESTful Web服务是基于REST架构的Web服务.在REST架构一切都是一种资源. RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序. ...

  10. 浅谈fhq treap

    一.简介 fhq treap 与一般的treap主要有3点不同 1.不用旋转 2.以merge和split为核心操作,通过它们的组合实现平衡树的所有操作 3.可以可持久化 二.核心操作 代码中val表 ...