• 1. Java 输入输出
  • 2. Java的输入输出流Java通过流来进行输入输出操作 流是指一个无限长的字节序列,可以被读写访问 标准输入输出流和java.io包中提供的输入输出流 Java流的功能很多,并具有丰富的层次结构能够满足不同的功能要求
  • 3. Java输入输出流Java开发环境中的java.io包中提供了用户程序可用的输入和输出流 Java输入/输出流的基础类是InputStream和OutputStream这两个抽象类 Java.io包中其它的类都是这两个类的子类 注:唯一例外的是RandomAccessFile类,它允许对文件进行随即访问
  • 4. 输入输出流流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,
  • 5. Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四) Java中其他多种多样变化的流均是由它们派生出来的
  • 6. 输入流的基本操作InputStream abstract  int read()        从输入流中读取数据的下一个字节。  Int read(byte[] b)      从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。  Int read(byte[] b, int off, int len)           将输入流中最多 len 个数据字节读入 byte 数组。abstract  voidclose()           关闭该流并释放与之关联的所有资源。   intread()           读取单个字符。  intread(char[] cbuf)           将字符读入数组。 abstract  intread(char[] cbuf, int off, int len)           将字符读入数组的某一部分。Reader
  • 7. 输出流的基本操作OutputStream  voidclose()           关闭此输出流并释放与此流有关的所有系统资源。 voidflush()           刷新此输出流并强制写出所有缓冲的输出字节。  voidwrite(byte[] b)           将 b.length 个字节从指定的 byte 数组写入此输出流. voidwrite(byte[] b, int off, int len)           将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。abstract  voidwrite(int b)           将指定的字节写入此输出流。abstract  voidclose() //闭此流,但要先刷新它。 abstract  voidflush() //      刷新该流的缓冲。 voidwrite(char[] cbuf) //        写入字符数组。 abstract  voidwrite(char[] cbuf, int off, int len) //  写入字符数组的某一部分。  voidwrite(int c) //写入单个字符。 voidwrite(String str) //      写入字符串。 voidwrite(String str, int off, int len) //     写入字符串的某一部分。       Write
  • 8. 节点流(直接与数据源相连)I/O Streams (节点流)Type of I/OStreamsDescriptionMemory CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputStream 从/向内存数组读写数据. StringReader StringWriter StringBufferInputStream 从/向内存字符串读写数据 Pipe PipedReader PipedWriter PipedInputStream PipedOutputStream 实现管道的输入和输出 File FileReader FileWriter FileInputStream FileOutputStream 统称为文件流。对文件进行读、写操作
  • 9. 过滤流I/O Streams (过滤流)Type of I/OStreamsDescription Printing PrintWriter PrintStream 包含方便的打印方法 Buffering BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 在读入或写出时,对数据进行缓存,以减少I/O的次数。 Filtering FilterReader FilterWriter FilterInputStream FilterOutputStream 过滤流,在数据进行读或写时进行过滤。 Converting between Bytes and Characters InputStreamReader OutputStreamWriter 按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换。
  • 10. 输入/输出流的套接节点流在程序中用得较少,一般常用的是通过过滤流将多个流套接在一起,利用各种流的特性共同处理数据。例如: 磁盘文件->FileInputStream ->BufferedInputStream ->DataInputStream->程序
  • 11. 字节流TestInputStream.java TestOutputStream.java注输入输出流是在用户创建时自动打开,用户可用close()方法显示关闭,也可以当对象被垃圾收集时隐式关闭
  • 12. 文件基本操作-字符流import java.io.*; public class TestFileDemo{ public static void main(String[] args){ try{ FileWriter out = new FileWriter(“E:\\test.txt"); FileReader in = new FileReader(“E:\\test.txt"); out.write(“程序让生活更美好"); out.close(); char[] s = new char[5]; in.read(s); System.out.println(s); in.close(); }catch(Exception e){ System.out.println("error"); } } }
  • 13. 用Buffer改进文件操作BufferedReader和BufferedWriter类被用来从基于字符的输入和输出流中读取和写入文本。BufferdReader类缓存字符以更高效的读取字符串,数组和文本行。BufferedWriter类缓存字符以更高效的写入字符串,数组和文本行 import java.io.*; public class FileDemo1{ public static void main(String[] args){ try{ BufferedWriter out = new BufferedWriter(new FileWriter("D:\\test.txt")); BufferedReader in = new BufferedReader(new FileReader("D:\\test.txt")); out.write("Hello,World"); out.close(); String s; s = in.readLine(); System.out.println(s); in.close(); }catch(Exception e){ System.out.println("error"); } } }
  • 14.  DataInputStream和DataOutputStream(Filter stream) 读写基本数据类型: DataInputStream方法 byte readByte( ) boolean readBoolean( ) long readLong( ) char readChar( ) double readDouble( ) float readFloat( ) short readshort( ) int readInt( ) DataOutputStream 方法 void writeByte(byte) void writeBoolean(boolean) void writeLong( long ) void writeChar(char) void writeDouble(double) void writeFloat( float) void writeshort(short) void writeInt ( int) void writeBytes(String) void writeChars(String )数据流DataInputStream/DataOutputStream
  • 15. 示例 public class DataIOTest { public static void main(String[] args) throws IOException { // write the data out DataOutputStream out = new DataOutputStream(new FileOutputStream("invoice1.txt")); double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; int[] units = { 12, 8, 13, 29, 50 }; String[] descs = { "Apple ", "Bug", “Cat", “Dog", “Ear" }; DataIOTest.java
  • 16. for (int i = 0; i < prices.length; i ++) { out.writeDouble(prices[i]); out.writeChar('\t'); out.writeInt(units[i]); out.writeChar('\t'); out.writeChars(descs[i]); out.writeChar('\n'); } out.close(); // read it in again DataInputStream in = new DataInputStream(new FileInputStream("invoice1.txt")); double price; int unit; String desc; double total = 0.0;
  • 17. try { while (true) { price = in.readDouble(); in.readChar(); // throws out the tab unit = in.readInt(); in.readChar(); // throws out the tab desc = in.readLine(); System.out.println("You've ordered " + unit + " units of " + desc + " at $" + price); total = total + unit * price; } } catch (EOFException e) { } System.out.println("For a TOTAL of: $" + total); in.close(); } } You've ordered 12 units of Java T-shirt at $19.99 You've ordered 8 units of Java Mug at $9.99 You've ordered 13 units of Duke Juggling Dolls at $15.99 You've ordered 29 units of Java Pin at $3.99 You've ordered 50 units of Java Key Chain at $4.99 For a TOTAL of: $892.88
  • 18. 标准输入/输出System类中定义的流对象有三个: System.in:BufferedInputStream; System.out:PrintStream; System.error:PrintStream。
  • 19. 从标准输入中获取信息System类中定义的流对象有三个System.in:BufferedInputStream; System.out:PrintStream; System.error:PrintStream。 Java的System类中包含一个InputStream类型的静态对象in,我们可以通过它进行基本的输入。但它是以字节为单位进行读取的。 public class InDemo{ public static void main(String[] args){ try{ byte[] b = new byte[255]; System.in.read(b); String s = new String(b); System.out.println(s); }catch(Exception e){ System.out.println("Error while read from the standard in"); } } }
  • 20. 改进的标准输入标准输入: char ch = System.in.read(); //输入一个字符 BufferedReader br = new BufferedReader(new InputStreamReader( System.in ) ); //缓存字节流转字符流,再转缓存字符流 String line = br.readLine();//此处用到了缓存流的读入一行的方法。 import java.io.*; public class IoDemo{ public static void main(String[] args){ try{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String c = in.readLine(); System.out.println(c); }catch(Exception e){ System.out.println("Error"); } } }
  • 21. 文件 Java.io.File 文件类提供获取文件基本信息,以及 其它与文件相关的操作。 创建新的文件对象: File myFile; myFile=new File(“mymotd”); myFile = new File(“\”,”mymotd”); …
  • 22. 文件测试与实用方法文件名 String getName( ) String getPath( ) String getAbsolutePath( ) String getParent( ) boolean renameTo( File newName) 文件测试 boolean exists( ) boolean canWrite( ) boolean canRead( ) boolean isFile( ) boolean isDirectory( ) boolean isAbsolute( )TestFile.java
  • 23. 系统类应用程序中经常需要访问一些系统资源,像系统属性,标准输入输出,当前时间等 系统类的组成 系统类是最终类, 他的所有成员都是私有的,所有变量和方法都是类变量和方法 系统类不用初始化就可以使用 如:system.out
  • 24. 系统类System 类属于 java.lang 包。System 类是直接继承最高父类 Object
  • 25. 系统类例子 class UserNameTest { public static void main(String args[]) { String name; name = System.getProperty("user.name"); System.out.println(name); } }UserNameTest.java
  • 26. 系统类标准流 标准输入:System.in 标准输出:System.out 标准错误:System.err 标准输入输出流是从键盘读入的字符流,标准输出是输出显示的字符流 System.err.println(“erro”);
  • 27. 系统类print()和printIn()方法基本相同。都是 把字符串写入流中 print()和printIn()方法都只有一个参数 例子 System.out.println("This is a test program"); 向屏幕上输出字符串 aa=System.in.read(); 从键盘读入字符 区别:printIn()自动在字符串后面加一换行符 ;
  • 28. java程序可以通过调用系统类的方法来读写系统属性 用getProperty和getProperties读取系统属性 系统属性
  • 29. 系统类currentTimeMillis()方法返回当前的系统时间 arraycopy()方法可以从一个数组拷贝数据到另一个数组 例:char[] sourcearray={'2','4','6','7','9','2'}; char[] array1=new char[10]; System.arraycopy(sourcearray,0,array1,0,6); for (int i = 0; i < array1.length; i++) { System.out.println(array1[i]); }
  • 30. 系统类调用system.exit()方法可以退出java解释器 注:使用exit()方法要特别小心,尤其在applet中,它不但退出用户的java程序,而且导致java解释器退出
  • 31. 课堂练习应用BufferedReader,BufferedWriter两个类,将两个文件中的内容合并到一个新的文件中。