1、马士兵 JAVA视频教程第08章流IO第八章 流1Java流式输入/输出原理2Java流类的分类3输入,输出流类4常见的节点流(常见:文件流,分为:字符,字节流/输入,输出流)和处理流(常见:缓冲流,分为)4.1文件流4.2缓冲流5 数据流6 转换流7 Print流8 Object流2010年3月31日星期三, 19:54:28 2010年4月2日 星期五20:00:271. java流式输入输出流原理 文件(桶) - 流(管道) - 程序2. java输入输出流分类 (输入输出相对于程序来说的,而不是文件)Java.io包中定义了多个流类型(类或者抽象类)来实现输入/输出功能:可以不按数据流
2、的方向不同分为输入流和输出流按处理数据单位不同分为字节流和字符流按功能不同分为节点流和处理流J2SDK所提供的所有流类型位于包Java,io内都分别继承自以下四中抽象流类型。字节流(Stream)字符流(两个字节)输入流InputStreamReader输出流OutputStreamWriter3. 输入/输出流类4个1 InputStream 继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit),下图深色为节点流,浅色为处理流InputStream的基本方法2 OutputStream 继承自outputStream的流都是用于程序中输入数据,且数据的单位
3、为字节(8bit),下图深色为节点流,浅色为处理流OutputStream的基本方法3 Reader 继承自Reader的流都是用于向程序输入数据,且数据的单位为字节(16bit),下图深色为节点流,浅色为处理流Reader的基本用法4 Writer 继承自Writer的流都是用于程序中输入数据,且数据的单位为字节(16bit),下图深色为节点流,浅色为处理流writer的基本用法4. 常见节点流/处理流4.1 节点流类型(直接读取写入.不经过处理)4.1.1 常见节点流:文件流例子:IO TestFileInputStream.java 字节流按一个字节一个字节读取文件import java
4、.io.*;public class TestFileInputStream public static void main(String args) int b = 0; FileInputStream in = null; try in = new FileInputStream(F:My WorkspaceJavaIOTestFileInputStream.java); catch (FileNotFoundException e) System.out.println(找不到指定文件); System.exit(-1); try /读数据 long num = 0; while(b=i
5、n.read()!=-1)/读一个字节到变量b,b=-1表示读取完成 System.out.print(char)b); num+;/计数 in.close(); System.out.println(); System.out.println(共读取了 +num+ 个字节); catch (IOException e1) System.out.println(文件读取错误); System.exit(-1); IOTestFileOutputStream.java 字节流复制文件import java.io.*;public class TestFileOutputStream public
6、 static void main(String args) int b = 0; FileInputStream in = null; /声明in为文件输入流(管道) FileOutputStream out = null;/声明out为文件输流(管道) try in = new FileInputStream(F:/My Workspace/Java/IO/TestFileOutputStream.java); out = new FileOutputStream(F:/My Workspace/Java/IO/copy TestFileOutputStream.java); while(
7、b=in.read()!=-1) out.write(b); in.close(); out.close(); catch (FileNotFoundException e2) System.out.println(找不到指定文件); System.exit(-1); catch (IOException e1) System.out.println(文件复制错误); System.exit(-1); System.out.println(文件已复制); IOTestFileReader.java 字符流按一个字符一个读取文件import java.io.*;public class Test
8、FileReader public static void main(String args) FileReader fr = null; int c = 0; try fr = new FileReader(d:sharejavaioTestFileReader.java); int ln = 0; while (c = fr.read() != -1) /char ch = (char) fr.read(); System.out.print(char)c); /if (+ln = 100) System.out.println(); ln = 0; fr.close(); catch (
9、FileNotFoundException e) System.out.println(找不到指定文件); catch (IOException e) System.out.println(文件读取错误); IO TestFileWriter.java 字符流输出大多国家的数文字import java.io.*;public class TestFileWriter public static void main(String args) FileWriter fw = null; try fw = new FileWriter(F:My WorkspaceJavaIOunicode.txt)
10、; for(int c=0;c=50000;c+) fw.write(c); fw.close(); catch (IOException e1) e1.printStackTrace(); System.out.println(文件写入错误); System.exit(-1); IOTestFileWriter2.java 字符流复制文件 并且每个字符后面多输出一个“|”字符import java.io.*;public class TestFileWriter2 public static void main(String args) int b = 0; FileReader fn =
11、null; FileWriter fw = null; try fn = new FileReader(F:My WorkspaceJavaIOTestFileWriter2.java); fw = new FileWriter(F:My WorkspaceJavaIOcopy TestFileWriter2.txt); while(b = fn.read()!=-1) fw.write(“|”); fw.write(b); fn.close(); fw.close(); catch (IOException e1) e1.printStackTrace(); System.out.print
12、ln(文件写入错误); System.exit(-1); 4.2 处理流( 经过处理的流)4.2.1常见处理流:缓冲流 IO TestBufferStream1.javaimport java.io.*;public class TestBufferStream1 public static void main(String args) try FileInputStream fis = new FileInputStream(F:My WorkspaceJavaIOTestBufferStream1.java); BufferedInputStream bis = new BufferedI
13、nputStream(fis); int c = 0; System.out.println(bis.read(); System.out.println(bis.read(); bis.mark(100); /从100号往外读 for(int i=0;i=10 & (c=bis.read()!=-1;i+) System.out.print(char)c+ ); System.out.println(); bis.reset();/回到标记点 for(int i=0;i=10 & (c=bis.read()!=-1;i+) System.out.print(char)c+ ); bis.cl
14、ose(); catch (IOException e) e.printStackTrace(); IO/TestBufferStream2.java 带缓冲区的输入输出流(能读一行)import java.io.*;public class TestBufferStream2 public static void main(String args) try BufferedWriter bw = new BufferedWriter(new FileWriter(d:sharejavadat2.txt); BufferedReader br = new BufferedReader( new
15、 FileReader(d:sharejavadat2.txt); String s = null; for(int i=1;i=100;i+) s = String.valueOf(Math.random(); bw.write(s); bw.newLine(); bw.flush();/全部取出缓冲区数据 while(s=br.readLine()!=null)/读一行 System.out.println(s); bw.close(); br.close(); catch (IOException e) e.printStackTrace(); 5. 转换流InputStreamRead
16、er和OutputStreamWriter用于与字节数据到字符数据之间转换。InputStreamReader需和InputStream“套接”。InputStream转换成ReaderOutputStreamWriter需和OutputStream“套接”。OutputStream转换成Writer转换流在构造时可以指定起编码集合,例如InputStream isr = new InputStreamReader ( System.in, “ISO08859_1”)例子IOTestTransForm1.javaIOTestTransForm2.javaimport java.io.*;pub
17、lic class TestTransForm2 public static void main(String args) 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) break; System.out.println(s.toUpperCase()
18、; s = br.readLine(); br.close(); catch (IOException e) e.printStackTrace(); /阻塞6. 数据流 DataInputStream 和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。DataInputStream和DataOutputStream踢狗了可以存取与机器无关的Java原始类型数据(如:int,double等)的方法DataInputStream和DataOutputStre
19、am的构造方法:DataInputStream( InputStream in)DataOutputStream( OutputStream out)例子7. Print流例子1import java.io.*;public class TestPrintStream1 public static void main(String args) PrintStream ps = null; try FileOutputStream fos = new FileOutputStream(d:baklog.dat); ps = new PrintStream(fos); catch (IOExcep
20、tion e) e.printStackTrace(); if(ps != null) System.setOut(ps);/设置输出窗口. int ln = 0; for(char c = 0; c =100) System.out.println(); ln = 0; 例子3import java.util.*; import java.io.*;public class TestPrintStream3 public static void main(String args) String s = null; BufferedReader br = new BufferedReader(
21、 new InputStreamReader(System.in); try FileWriter fw = new FileWriter (d:baklogfile.log, true); /Log4J PrintWriter log = new PrintWriter(fw); while (s = br.readLine()!=null) if(s.equalsIgnoreCase(exit) break; System.out.println(s.toUpperCase(); log.println(-); log.println(s.toUpperCase(); log.flush(
22、); log.println(=+new Date()+=); log.flush(); log.close(); catch (IOException e) e.printStackTrace(); 8. Object流 直接将Object写入或读出 transient关键字 透明的 serializable接口 可序列化externalizable接口 控制序列化import java.io.*;public class TestObjectIO public static void main(String args) throws Exception T t = new T(); t.k
23、 = 8; FileOutputStream fos = new FileOutputStream(d:/share/java/io/testobjectio.dat); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(t); oos.flush(); oos.close(); FileInputStream fis = new FileInputStream(d:/share/java/io/testobjectio.dat); ObjectInputStream ois = new ObjectInputStream(fis); T tReaded = (T)ois.readObject(); System.out.println(tReaded.i + + tReaded.j + + tReaded.d + + tReaded.k); class T implements Serializable int i = 10; int j = 9; double d = 2.3; transient int k = 15;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1