java13-IO输入输出流
2013-04-19 01:19
357 查看
------- android培训、java培训、期待与您交流!
----------
(Input Output)流
用来处理设备之间的数据传输。java对数据的操作是通过流的方式。java用于操作流的对象都在IO包中。
按操作数据类型分为两种:字节流与字符流。
按流向分为:输入流,输出流。
IO流常用基类
字节流抽象基类
InputStream,OutputStream
字符流抽象基类
Reader,Writer
这四个类派生出来的子类名称都是以父类名作为子类名的后缀。功能为前缀。
如:InputStream的子类FileInputStream
Reader的子类FileReader
2.字符流
Reader,Writer
/*
使用文件操作的Writer子类对象FileWriter。
建立对象,明确数据存放的目的地。
write方法,将字符串写入到流中
flush将数据刷到目的地中
close刷新后流关闭
和flush区别是,flush只是刷新,流还在。close刷新后流关闭刷新后流关闭
*/
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args) throws IOException//建立对象时可能会有异常
{
/*创建一个FileWriter对象,这个对象一被初始化就必须要明确被操作的文件。
该文件会被创建到指定目录下,目录下若有同名文件,会被覆盖。
就是明确数据存放的目的地。
*/
FileWriter fw = new FileWriter("demo.txt");
//调用方法write,将字符串写入到流中
fw.write("adc");
//刷新流对象中缓冲中的数据,将数据刷到目的地中。
//fw.flush();
/*关闭流资源,但关闭前会刷新一次内部缓冲中的数据
将数据刷到目的地中
和flush区别是,flush只是刷新,流还在。
close刷新后流关闭*/
fw.close();
}
}
3.IO异常基本处理
/*
IO异常的基本处理
1,创建空对象在成员位置,以便作用于类中。
2,try对象初始化,开始输入,以便处理异常。
3,对异常处理。
4,finally关闭缓存。先判断对象是否为空,然后确是否关闭,关闭要try,catch处理。
*/
import java.io.*;
class EWriter
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("w:\\demo.txt");
//win中\\反转字符
fw.write("cabadd");
}
catch(IOException e)
{
System.out.println("io"+e.toString());
//处理异常
}
finally
{
if(fw!=null)
//判断close是否需要执行
try
{
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
4.对已经存在的文件续写
import java.io.*;
class XxWriter
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("demo.txt",true);
//通过传递一个true,使文件不被覆写,并在文件结尾续写
fw.write("cbn");
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
if(fw!=null)
try
{
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
5.读取文件
FileReader
和FileWriter相似。
创建对象,与文件相关联。要保证文件存在,不然会文件不存在异常。
读取方法read()
一次读一个字符,自动往下读,到文件末尾会自动返回-1.
int ch =0;
while((ch=对象.rese())!=-1)
{}
------
read(char[])
返回的是读到的字符个数
定义一个字符数组,存储读到的字符
char[] buf = new char[1024整数倍];
int num = 0;
while((num=fr.read(buf))!=-1)
{
new String(buf,0,num)
// 返回 char 数组参数的特定子数组的字符串表示形式。
}
练习:复制文件
1,确定要复制文件位置,存储位置
2,建立数组,读取文件数据存入数组,数组中文件写入
3,关闭流
import java.io.*;
class Filerw
{
public static void main(String[] args)
{
//建立流对象变量,初始化为空
FileReader fr = null;
FileWriter fw = null;
try
{
//确定位置
fr = new FileReader("F:\\JAVA学习\\javalx\\MapDemo.java");
fw = new FileWriter("F:\\MapDemo.java");
//建立字符数组,确定数组长度,用于存储数据
char[] ch = new char[1024];
//读取文件数据存入数组,并把数组中数据传入写入流
//定义变量确定读取的个数
int len = 0;
while((len=fr.read(ch))!=-1)
{
fw.write(ch,0,len);
}
}
catch(IOException e)
//处理异常
{
throw new RuntimeException("读写失败");
}
//关闭流
finally
{
if(fr!=null)
try
{
fr.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭流失败");
}
if(fw!=null)
try
{
fw.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭流失败");
}
}
}
}
字符流的缓冲区
继承了字符流接口,加了自己的方法。
缓冲区的出现提高了对数据的读写效率。
对应类有
BufferedWriter
BufferedReader
缓冲区要结合流才能使用,对流的功能进行了增强。
建立流对象,建立缓冲区对象bufw(写入),bufr(读取),并把流对象作为参数传入缓冲区的构造函数。
调用缓冲区方法操作文件,
bufw.write("ddd");//写入
bufw.newLine();//换行,不区分系统
bufw.flush();//只要使用缓冲区,就要刷新。
bufw.close();//关闭缓冲区,就是关闭缓冲区中的流对象。
bufr.read();
bufw.readLine();//读取一行;结尾时返回空
bufw.close();//关闭缓冲区
/*
自己写一个BufferedReader
因为缓冲区是给流调用的,异常不能try,只能throws.
1,设置构造函数要有字符流对象参数。
2,定义读取方法,一次一行
3,定义关闭方法,关闭流对象
FileReader
*/
import java.io.*;
class MyBufferedReader
{
//设置私有参数FileReader
private FileReader r;
//MyBufferedReader(){}
//设置构造参数
MyBufferedReader(FileReader r)
{
this.r = r;
}
//设置myReadLine
public String myReadLine()throws IOException
{
//设置数据存储容器,偷懒不用字符数组,直接用字符串容器
StringBuilder sb= new StringBuilder();
//读取字符并存入容器,直到换行
int ch = 0;
while((ch=r.read())!=-1)
{
//
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
//没有数据时返回null;
if(sb.length()!=0)
return sb.toString();
return null;
}
//定义关闭流对象方法
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args)
{
//定义读取流对象
FileReader fr =null;
MyBufferedReader myBuf = null;
try
{
fr = new FileReader("TreeSet.java");
//建立缓冲区对象
myBuf = new MyBufferedReader(fr);
//读取
String line = null;
while((line=myBuf.myReadLine())!=null)
{
//换行没有存入,输出时要加上换行
System.out.println(line);
}
}
catch(IOException e)
{
throw new RuntimeException("读取错误");
}
finally
{
if(myBuf!=null)
try
{
myBuf.myClose();
}
catch(IOException e)
{
throw new RuntimeException("关闭异常");
}
}
}
}
LineNumberReader
BufferedReader的子类
多了设置和获取行号的功能。也是装饰类。
setLineNumber();
getLineNumber();//设置在哪开始
------- android培训、java培训、期待与您交流!
----------
----------
(Input Output)流
用来处理设备之间的数据传输。java对数据的操作是通过流的方式。java用于操作流的对象都在IO包中。
按操作数据类型分为两种:字节流与字符流。
按流向分为:输入流,输出流。
IO流常用基类
字节流抽象基类
InputStream,OutputStream
字符流抽象基类
Reader,Writer
这四个类派生出来的子类名称都是以父类名作为子类名的后缀。功能为前缀。
如:InputStream的子类FileInputStream
Reader的子类FileReader
2.字符流
Reader,Writer
/*
使用文件操作的Writer子类对象FileWriter。
建立对象,明确数据存放的目的地。
write方法,将字符串写入到流中
flush将数据刷到目的地中
close刷新后流关闭
和flush区别是,flush只是刷新,流还在。close刷新后流关闭刷新后流关闭
*/
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args) throws IOException//建立对象时可能会有异常
{
/*创建一个FileWriter对象,这个对象一被初始化就必须要明确被操作的文件。
该文件会被创建到指定目录下,目录下若有同名文件,会被覆盖。
就是明确数据存放的目的地。
*/
FileWriter fw = new FileWriter("demo.txt");
//调用方法write,将字符串写入到流中
fw.write("adc");
//刷新流对象中缓冲中的数据,将数据刷到目的地中。
//fw.flush();
/*关闭流资源,但关闭前会刷新一次内部缓冲中的数据
将数据刷到目的地中
和flush区别是,flush只是刷新,流还在。
close刷新后流关闭*/
fw.close();
}
}
3.IO异常基本处理
/*
IO异常的基本处理
1,创建空对象在成员位置,以便作用于类中。
2,try对象初始化,开始输入,以便处理异常。
3,对异常处理。
4,finally关闭缓存。先判断对象是否为空,然后确是否关闭,关闭要try,catch处理。
*/
import java.io.*;
class EWriter
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("w:\\demo.txt");
//win中\\反转字符
fw.write("cabadd");
}
catch(IOException e)
{
System.out.println("io"+e.toString());
//处理异常
}
finally
{
if(fw!=null)
//判断close是否需要执行
try
{
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
4.对已经存在的文件续写
import java.io.*;
class XxWriter
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("demo.txt",true);
//通过传递一个true,使文件不被覆写,并在文件结尾续写
fw.write("cbn");
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
if(fw!=null)
try
{
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}
5.读取文件
FileReader
和FileWriter相似。
创建对象,与文件相关联。要保证文件存在,不然会文件不存在异常。
读取方法read()
一次读一个字符,自动往下读,到文件末尾会自动返回-1.
int ch =0;
while((ch=对象.rese())!=-1)
{}
------
read(char[])
返回的是读到的字符个数
定义一个字符数组,存储读到的字符
char[] buf = new char[1024整数倍];
int num = 0;
while((num=fr.read(buf))!=-1)
{
new String(buf,0,num)
// 返回 char 数组参数的特定子数组的字符串表示形式。
}
练习:复制文件
1,确定要复制文件位置,存储位置
2,建立数组,读取文件数据存入数组,数组中文件写入
3,关闭流
import java.io.*;
class Filerw
{
public static void main(String[] args)
{
//建立流对象变量,初始化为空
FileReader fr = null;
FileWriter fw = null;
try
{
//确定位置
fr = new FileReader("F:\\JAVA学习\\javalx\\MapDemo.java");
fw = new FileWriter("F:\\MapDemo.java");
//建立字符数组,确定数组长度,用于存储数据
char[] ch = new char[1024];
//读取文件数据存入数组,并把数组中数据传入写入流
//定义变量确定读取的个数
int len = 0;
while((len=fr.read(ch))!=-1)
{
fw.write(ch,0,len);
}
}
catch(IOException e)
//处理异常
{
throw new RuntimeException("读写失败");
}
//关闭流
finally
{
if(fr!=null)
try
{
fr.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭流失败");
}
if(fw!=null)
try
{
fw.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭流失败");
}
}
}
}
字符流的缓冲区
继承了字符流接口,加了自己的方法。
缓冲区的出现提高了对数据的读写效率。
对应类有
BufferedWriter
BufferedReader
缓冲区要结合流才能使用,对流的功能进行了增强。
建立流对象,建立缓冲区对象bufw(写入),bufr(读取),并把流对象作为参数传入缓冲区的构造函数。
调用缓冲区方法操作文件,
bufw.write("ddd");//写入
bufw.newLine();//换行,不区分系统
bufw.flush();//只要使用缓冲区,就要刷新。
bufw.close();//关闭缓冲区,就是关闭缓冲区中的流对象。
bufr.read();
bufw.readLine();//读取一行;结尾时返回空
bufw.close();//关闭缓冲区
/*
自己写一个BufferedReader
因为缓冲区是给流调用的,异常不能try,只能throws.
1,设置构造函数要有字符流对象参数。
2,定义读取方法,一次一行
3,定义关闭方法,关闭流对象
FileReader
*/
import java.io.*;
class MyBufferedReader
{
//设置私有参数FileReader
private FileReader r;
//MyBufferedReader(){}
//设置构造参数
MyBufferedReader(FileReader r)
{
this.r = r;
}
//设置myReadLine
public String myReadLine()throws IOException
{
//设置数据存储容器,偷懒不用字符数组,直接用字符串容器
StringBuilder sb= new StringBuilder();
//读取字符并存入容器,直到换行
int ch = 0;
while((ch=r.read())!=-1)
{
//
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
//没有数据时返回null;
if(sb.length()!=0)
return sb.toString();
return null;
}
//定义关闭流对象方法
public void myClose()throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String[] args)
{
//定义读取流对象
FileReader fr =null;
MyBufferedReader myBuf = null;
try
{
fr = new FileReader("TreeSet.java");
//建立缓冲区对象
myBuf = new MyBufferedReader(fr);
//读取
String line = null;
while((line=myBuf.myReadLine())!=null)
{
//换行没有存入,输出时要加上换行
System.out.println(line);
}
}
catch(IOException e)
{
throw new RuntimeException("读取错误");
}
finally
{
if(myBuf!=null)
try
{
myBuf.myClose();
}
catch(IOException e)
{
throw new RuntimeException("关闭异常");
}
}
}
}
LineNumberReader
BufferedReader的子类
多了设置和获取行号的功能。也是装饰类。
setLineNumber();
getLineNumber();//设置在哪开始
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员——13JavaIO输入输出1
- 黑马程序员——JAVA IO输入输出(二)
- Java_io体系之CharArrayReader、CharArrayWriter简介、走进源码及示例——13
- JAVA进阶 面向对象程序设计——第8周 异常处理与输入输出(IO)
- java从入门到精髓 - IO输入输出 BufferedReaderWriter
- Java中输入输出(IO)和流的基本概念
- java IO 输入输出(六)
- 黑马程序员——JAVA IO输入输出(三)
- java IO 输入输出
- java IO总结之字节流操作控制台输入输出(高效)
- java IO 输入输出(七)
- JAVA高级视频02_IO输入与输出日记5(02-13到15)
- java IO操作与字节流(八)过滤流输入输出基本数据类型
- 黑马程序员————java基础--------IO输入输出之异常、File类和递归
- java IO总结之字符流操作控制台输入输出(高效)
- JAVA中IO字符输入输出的文件复制
- java IO 输入输出(八)
- java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
- Java IO学习【13】利用字节流复制文件的4种方法详解
- java IO 输入输出(九)