概述
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、概述
特点:
a、IO流用来处理设备之间的数据传输。
b、Java对数据的操作是通过流的方式。
c、Java用于操作流的对象都在IO包中。
d、流按操作数据分为两种:字节流和字符流。
e、流按流向分为:输入流和输出流。
IO流的常用基本类:
1 字节流:InputStream和OutputStream
2 字符流:Reader和Writer
写方法展示
public class FileWriterDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
//而且该文件会被创建到指定("d:\demo.txt")目录下,如果该目录下已经有同名文件,则该文件将被覆盖
//其实该步骤就是在明确数据要存放的目的地
FileWriter fw = new FileWriter("demo.txt");
//调用write方法,将字符串写入到流中
fw.write("abcde");
//刷新流对象中缓冲中的数据;将数据刷新到目的地
fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据。
//将数据刷新到目的地中
//和flush区别:flush刷新后可以继续使用;close刷新后会将流关闭
fw.close(); //关闭前会刷新一次,把数据刷新出来
}
}
读方法展示
public class FileReaderDemo {
public static void main(String[] args)throws IOException {
FileReader fr = new FileReader("e:\demo.txt");
//第一种读取方式
/*
int ch=0;
while((ch=fr.read())!=-1){
System.out.println((char)ch);
}*/
/* while(true){
int ch=fr.read();
if(ch==-1)
break;
System.out.println((char)ch);
}
*/
//第二种读取方式
// FileReader fr = new FileReader("e:\demo.java"); //这是读取java文件方式
char[] buf = new char[1024];
int num = 0;
while((num = fr.read(buf))!=-1){
System.out.println(new String(buf,0,num));
}
fr.close();//这里的close只有关闭的作用
}
}
流的异常处理方式
public class FileWriterException {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileWriter fw = null;
try {
fw = new FileWriter("e:\demo.txt",true);//这里传递一个参数true代表不覆盖已有文件,并在已有文件末尾进行续写
fw.write("rnpoiu");
//这里续写
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (fw != null) //为什么是不等于null,因为fw如果为null关闭不了资源,只有fw有资源才能关闭
fw.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}
为了增加读写数据效率加入缓冲区BufferedReader和BufferedWriter
以示例方式进行展示:复制文件
public class BufferedCopy {
public static void main(String[] args) {
BufferedReader bufr = null;
BufferedWriter bufw = null;
try{
bufr = new BufferedReader(new FileReader("e:\buf.txt"));
bufw = new BufferedWriter(new FileWriter("e:\buf_copy.txt"));
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch(IOException e){
throw new RuntimeException("复写失败");
}
finally{
try{
if(bufr!=null)
bufr.close();
}
catch(IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(bufw!=null)
bufw.close();
}
catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
}
单读取流的示例:行读取
public class BufferedReaderDemo {
public static void main(String[] args)throws IOException {
FileReader fr = new FileReader("e:\buf.txt");
BufferedReader bufr = new BufferedReader(fr);
//循环读取数据
/*
char[] chs = new char[1024];
int len = 0;
while((len=bufr.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
bufr.close();
*/
//单行读取数据
String line = null;
while((line=(bufr.readLine()))!=null){
System.out.println(line);
}
bufr.close();
}
}
BufferedWriter特有的方法换行示例
public class BufferedWriteDemo {
public static void main(String[] args)throws IOException {
//创建一个字符写入流对象
FileWriter fw = new FileWriter("e:\buf.txt");
//为了提高字符写入流的效率,加入了缓冲技术
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw = new BufferedWriter(fw);
for(int x=1;x<5;x++){
bufw.write("abc"+x);
bufw.newLine();
//换行
bufw.flush();
//只要用到缓冲区就要刷新
}
//关闭缓冲区就是在关闭缓冲区的流对象
bufw.close();
}
}
LineNumberReader将读取的java文件加入行
public class LineNumberReaderDemo {
public static void main(String[] args){
FileReader fr = null;
LineNumberReader lnr = null;
try{
fr = new FileReader("e:\MathDemo.java");
lnr = new LineNumberReader(fr);
String line=null;
lnr.setLineNumber(100);
//设定行号从100开始
while((line=lnr.readLine())!=null){
System.out.println(lnr.getLineNumber()+":"+line);
}
}
catch(IOException e){
System.out.println("erro");
}
finally{
//不能忘了finally
try{
lnr.close();
}
catch(IOException e){
System.out.println("关闭失败");
}
}
}
}
根据LineNumberReader自己写一个程序模仿功能
class MyLineNumReader {
private Reader fr;
private int lineNumber = 0;
MyLineNumReader(Reader fr) {
this.fr = fr;
}
public int getLineNumber() {
return lineNumber;
}
public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}
public String MyLineNumber() throws IOException {
StringBuilder sb = new StringBuilder();
int ch = 0;
lineNumber++;
//读一行才自增,所以放在while外面
while ((ch = fr.read()) != -1) {
if (ch == 'r')
continue;
if (ch == 'n')
return sb.toString();
else
sb.append((char) ch);
}
if (sb.length() != 0)
return sb.toString();
return null;
}
public void MyClose() throws IOException {
fr.close();
}
}
public class MyLineNumberReader {
public static void main(String[] args) throws IOException {
FileReader fir = new FileReader("e:\mm.java");
MyLineNumReader ml = new MyLineNumReader(fir);
String line = null;
ml.setLineNumber(100); // 设置行号
while ((line = ml.MyLineNumber()) != null) {
System.out.println(ml.getLineNumber() + ":" + line);
}
ml.MyClose();
}
}
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
最后
以上就是优美裙子为你收集整理的黑马程序员——java基础知识篇——>IO流的全部内容,希望文章能够帮你解决黑马程序员——java基础知识篇——>IO流所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复