黑马程序员_javaIO_第二天

---------------------- android培训java培训、期待与您交流! ----------------------

今天熟悉和复习是java.io,主要看的是毕老师javaIO第19天的视频。javaIO看似复杂,其实就是得理解他其中的体系关联。IO中四个抽象类InputStream,OutputStream,

Reader,Writer这四个抽象类,所有的IO流都是从这几个类衍生出来的 ,基本分为三类:

1.有基本的流FileInputStream,FileOutputStream,FileReader,FileWriter等。

2.有装饰类,带缓冲功能的流BufferedInputStream, BufferedOutputStream,BufferedReader,BufferedWriter等。

3.还有转换流,InputStreamReader OutputStreamWriter。

学习IO,需要理解好这三大类,把握他们之间的关系。

IO 中的转换流 :InputStreamReader OutputStreamWriter。

InputStreamReader 是字节流通向字符流的桥梁。它使用指定的 charset 读取字节并将其解码为字符集。 
public InputStreamReader(InputStream in,
                         String charsetName)
OutputStreamWriter 是字符流通向字节流的桥梁。
public OutputStreamWriter(OutputStream out,   String charsetName)  throws UnsupportedEncodingException
创建使用指定字符集的 OutputStreamWriter。 
转换流是字符和字节流之间的桥梁,一般在需要码表转换时用。
windows中文系统中默认使用GBK码表
中文码表 GB18030>GBK>GB2312。一般的网页采用是utf-8(jsp和servlet做javaweb项目时常用utf-8码表)。

System.in 标准输入流 默认输入设备是键盘
System.out 标准输出流 默认输出的在控制台打印
可以更该System.setIn(InputStream in)
重新分配输入流 可以是FileInputStream
这样的输入流便是所指向的文件流同样调用System.setOut(PrintStream out) 也可以重新分配输出流  也可以将输出写入到一个文件中去。
流只能操作数据 ,对文件和文件目录的操作用File。


依旧上今天的代码:

/***Administrator
 *2012-6-10上午09:07:09
 *MyBufferedReader.java
 *明白BufferedReader中的readline()这个高效的方法 模拟一下
 *装饰设计模式
 */
package jun.io.path;


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;


public class MyBufferedReader extends Reader {

private Reader reader = null;;
StringBuilder sb = null;

public MyBufferedReader(Reader reader) {
this.reader = reader;
}

public String readLine() throws IOException {
sb = new StringBuilder();
int chr = 0;
while ((chr = reader.read()) != -1) {
if (chr == '\r')
continue;
if (chr == '\n')
return sb.toString();
else
sb.append((char) (chr));
}
if (sb.length() != 0)
return sb.toString();
return null;
}

public static void main(String[] args) {
MyBufferedReader r = null;
try {
r = new MyBufferedReader(new FileReader("src//1.txt"));
String s = null;
while ((s = r.readLine()) != null) {
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// 调用子类实现的方法
return reader.read(cbuf, off, len);
}

@Override
public void close() throws IOException {
reader.close();
}
}

/***Administrator
 *2012-6-10上午10:47:09
 *MyLineNumberReader.java
 */
package jun.io.path;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;

public class MyLineNumberReader extends MyBufferedReader {
public int getLineNumber() {
return lineNumber;
}

public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}

private int lineNumber = 0;

public MyLineNumberReader(Reader reader) {
super(reader);

}

public String readLine() throws IOException {
String s = super.readLine();
if (s != null)
lineNumber++;
// 这里毕老师的视频中 没用进行判断 而是每次调用这个方法都自动加一,不严谨。
// 查看LineNumberReader的源码 也会发现sun也是做了判断的
return s;
}

public static void main(String[] args) {
MyLineNumberReader mr =null;
try {
/*
* LineNumberReader lnr= new LineNumberReader(new
* FileReader("src/1.txt")); String s=null;
* //lnr.setLineNumber(200); while((s= lnr.readLine()) != null ) {
* System.out.println(lnr.getLineNumber()+"::"+s);
*/
mr= new MyLineNumberReader(new FileReader(
"src/1.txt"));
String str = null;
mr.setLineNumber(200);
while ((str = mr.readLine()) != null) {
System.out.println("第"+mr.getLineNumber()+"行"+str);
}


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
mr.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}

}

}

/***Administrator
 *2012-6-10上午11:29:22
 *TestFileCopy.java
 *熟悉转换流 InputStramReader OutputStreamWriter
 */
package jun.io.path;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Date;

public class TestFileCopy {
public static void main(String[] args) {

BufferedReader in = null;
BufferedWriter out = null;
try {
//转换流的应用
in = new BufferedReader(new InputStreamReader(System.in));
// out = new BufferedWriter(new OutputStreamWriter(System.out));
// out = new BufferedWriter(new FileWriter("src/log.txt",true));
out  = new BufferedWriter(new OutputStreamWriter(System.out));
String s = null;
while ((s = in.readLine()) != null) {
if ("quit".equals(s)) {
System.out.println("成功退出...");
break;
} else {
out.write( new Date()+"::"+s.toUpperCase());
out.newLine();
out.flush();
}
}


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

package jun.io.path;

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;


public class ExceptionInfo {
public static void main(String[] args) {
try {
int[] arr = new int[2];
System.out.println(arr[3]);
} catch (Exception e) {
try {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy年MM月dd日 HH:mm:ss ");
PrintStream ps = new PrintStream("src/logException.log");
System.setOut(ps);
ps.println( sdf.format(date));
} catch (FileNotFoundException e1) {
throw new RuntimeException("日志文件创建失败");
}
e.printStackTrace(System.out);
}

}
}

     通过对IO的学习,认识到javaIO 操作的强大,操作起来也很方便。还有毕老师讲课也很有趣,哈哈!努力!

---------------------- android培训java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值