/***
* io流 运用
* 注意:只要子类 包含以下类名字的,就是该流的继承
* InputStream----- 输入字节流
* Reader-------- 输入字符流
* OutputStream-----输出字节流
* Writer --------输出字符流
*
*
* 【测试注意,指定路径和文件必须自己创建好。】
*/
import java.io.*;
import java.util.Date;
public class Stream {
public static void main(String[] args) {
/** *************FileInputStream 字节************************* */
// 读取文件并显示
int b = 0;
/***********************************************************************
* 新建对象必须 抛出异常 public FileInputStream(File file)throws
* FileNotFoundException
*/
FileInputStream in = null;
try {// 读取文件名
in = new FileInputStream("f:\\SimpleHello.java");
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
System.exit(-1);
}
try {// read()方法 :读取下一个数据字节;如果已到达文件末尾,则返回 -1。
long num = 0;
while ((b = in.read()) != -1) {
System.out.print((char) b);// 由于b是int类型,所以强制转换字符 显示出来
num++;
}
in.close();// 关闭读取 管道
System.out.println();
System.out.println("共读取了 " + num + " 个字节");
} catch (IOException e1) {// read 和close 方法都会抛出该异常
System.out.println("文件读取错误");
System.exit(-1);
}// 由于读取的是字节,所以对于 中文是 双字节的,无法识别。
/** *********FileOutputStream 字节*********************************** */
// /读取文件内容并复制到 另外文件中
FileInputStream in1 = null;
FileOutputStream out1 = null;
try {
in1 = new FileInputStream("c:/dat2.txt");// 读
out1 = new FileOutputStream("c:/out.java");// 写
while ((b = in1.read()) != -1) {
out1.write(b);
}
in1.close(); // 关闭读取管道
out1.close();// 关闭写入管道
} catch (FileNotFoundException e2) {
System.out.println("找不到指定文件");
System.exit(-1);
} catch (IOException e1) {
System.out.println("文件复制错误");
System.exit(-1);
}
System.out.println("文件已复制");
/** ********FileReader 字符****************** */
// 由于是字符流读取,所以是两个两个读,所以中文就可以显示出来了
FileReader fr = null;
int c2 = 0;
try {
fr = new FileReader("f:\\SimpleHello.java");
while ((c2 = fr.read()) != -1) {
System.out.print((char) c2);
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("文件读取错误");
}
/** ********FileWriter 字符********************** */
// 写入字节0到50000所有文字的输出并保存
FileWriter fw = null;
try {
fw = new FileWriter("c:\\dat3.txt");
for (int c = 0; c <= 50000; c++) {
fw.write(c);
}
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
/**
* *****缓冲流Buffered 外接管道,避免内存中内容不能完全读取而程序终止的问题
* ***************************
*/
try {
FileInputStream fis = new FileInputStream("c:\\TTT.java");// 定义读取文件字节流
BufferedInputStream bis = new BufferedInputStream(fis);// 定义读取文件缓冲字节流
// 并
// 把fis文件传给了bis.相当于 管道外 再套一个管道
int c = 0;
System.out.println((char) bis.read());// 读取第一个字节
System.out.println((char) bis.read());// 读取第二个字节
bis.mark(99);// 设置标记点
System.out.println((char) bis.read());// 读取第三个字节
bis.reset();// 回到标记的点mark(99)的位置上
System.out.println((char) bis.read());// 还是读取第三个字节
bis.mark(100);// 设置标记点
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
System.out.print((char) c + " ");
}
System.out.println();
// 标记点的好处是:前面读到哪里了,我不用接着往下读,可以返回到前面刚开始读的第一个 继续开始
bis.reset();// 回到标记的点mark(100)的位置上
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
System.out.print((char) c + " ");
}
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
/** ************缓冲 读写数据************************************* */
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(
"c:\\TTT11.java"));
BufferedReader br = new BufferedReader(new FileReader(
"c:\\TTT11.java"));
String s = null;
for (int i = 1; i <= 10; i++) {
s = String.valueOf(Math.random());// 定义随机数字并转化字符串型
bw.write(s);
bw.newLine();// 回车符号
}
//清空此数据输出流
bw.flush();// 完全读取 内存中所有数据,避免close关闭内存中还有数据
while ((s = br.readLine()) != null) {// readLine 一行一行读
System.out.println(s);// 输出1到10 的随机数
}
bw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
/** **********转换流 OutputStreamWriter************************************ */
// 经过包装后的FileOutputStream,可以字符串写入
try {
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("c:\\TTT11.java"));
osw.write("mircosof123456789");// 利用OutputStreamWriter,可以直接写字符串
System.out.println(osw.getEncoding());// GBK
osw.close();
osw = new OutputStreamWriter // true 的目的就是 跟在前面写入的数据继续写。如果没有true
// 那么,就覆盖前面的,又重头开始写 ISO8859_1包含了所有西方语言
(new FileOutputStream("c:\\TTT11.java", true), "ISO8859_1"); // latin-1
osw.write("abcdefg");
System.out.println(osw.getEncoding());// ISO8859_1
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
/** ************BufferedReader*************** */
// 测试可以在console 显示信息区 写英文. 写到输入区,阻塞方法
InputStreamReader isr = new InputStreamReader(System.in);//一个一个读到输入区
BufferedReader br = new BufferedReader(isr);// 为了读一行,继续包管道
String s = null;
try {
s = br.readLine();// 一行一行读
while (s != null) {
if (s.equalsIgnoreCase("exit"))// 当输入exit 就退出
break;
System.out.println(s.toUpperCase());// 转换成大写
s = br.readLine();// 读取一行
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
/** *********数据流 DataInputStream DataOutputStream************** */
ByteArrayOutputStream baos = new ByteArrayOutputStream();// byte 数组
DataOutputStream dos = new DataOutputStream(baos);//外面再包装 一个管道dos
try {
dos.writeDouble(Math.random());//写入8个字节的随机数
dos.writeBoolean(true);//写入一个字节的 boolean类型
//再定义一个管道 bais指向 baos.toByteArray()字节数组
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
System.out.println(bais.available());//输出有多少个字节 8+1=9
DataInputStream dis = new DataInputStream(bais);//定义dis管道 套在bais上
System.out.println(dis.readDouble());//注意,先写的先读,输出8个字节的随机数
System.out.println(dis.readBoolean());//后写的后读,输出1个字节的true
dos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
/****************Print输出打印流***************************/
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream("c:\\TTT111.java");// 定义fos输出管道
ps = new PrintStream(fos);// 在外面接PrintStream管道
} catch (IOException e) {
e.printStackTrace();
}
if (ps != null) {
System.setOut(ps);// 把输出在dos上的System.out,放到ps管道上.那么输出的数据只能在文件中保存了
}
int ln = 0;
// 同样输出 0到60000的字节文件
for (char c = 0; c <= 60000; c++) {
System.out.print(c + " ");
if (ln++ >= 100) {// 每打 100个数字换行
System.out.println();
ln = 0;
}
}
//读取文件到 dos区,不解释了
/* String filename = "c:\\TTT11.java";
if (filename != null) {
list(filename, System.out);
}
}
public static void list(String f, PrintStream fs) {
try {
BufferedReader br = new B
评论0