今天学习了下java的IO流,这里做个总结,方便查找。
InputStream/OutputSrteam
InputStream是个抽象类,表示字节输入流的所有类的超类。常见的有向文件写入数据。
OutputStream是个抽象类,表示字节输出流的所有类的超类。常见的有从文件写出数据。
继承关系:
举例:采用FileInputStream/FileOutputStream读写文件。
package yingjun.io; import java.io.*; //读取文件 public class TestFileInputStream { public static void main(String[] args) { FileInputStream in = null;//定义一个输入字节流 try { in = new FileInputStream("D:/test/newfilename.txt"); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); System.exit(-1); } try { long num = 0; int b = 0; while((b=in.read())!=-1){ //不等于-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); } } }
package yingjun.io; import java.io.*; //读出文件并写入另一个文件 public class TestFileOutputStream { public static void main(String[] args) { int b = 0; FileInputStream in = null;//用于读文件 FileOutputStream out = null;//用于向文件写数据 try { in = new FileInputStream("D:/test/oldfile.txt");//就像在oldfile这个文件里插入一个管道用于读取里面的内容。 out = new FileOutputStream("D:/test/newfile.txt");//就像在newfile这个文件里插入一个管道用于向里面写人内容 while((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("文件已经复制"); } }
##################################################################
Reader/Writer
Reader用于读取字符流的抽象类子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
Writer写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
举例:采用FileReader/FileWriter读写文件。
package yingjun.io; import java.io.*; //读取文件 public class TestFileReader { public static void main(String[] args) { FileReader fr = null; int c = 0; try { fr = new FileReader("D:/test/newfilename.txt"); while ((c = fr.read()) != -1) { System.out.print((char)c); } fr.close(); } catch (FileNotFoundException e) { System.out.println("找不到指定文件"); } catch (IOException e) { System.out.println("出错"); } } }
package yingjun.io; import java.io.*; //写入文件 public class TestFileWriter { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("D:/test/newfilename.txt"); for(int c=0;c<=50000;c++){ fw.write(c);//c表示的是unicode编码,50000基本涵盖了所有国家的文字。 } fw.close(); } catch (IOException e1) { e1.printStackTrace(); System.out.println("出错"); System.exit(-1); } } }
########################################################################
常见处理流
########################################################################
1:缓冲流
package yingjun.io; import java.io.*; public class TestBufferStream2 { //向一个文件里写入数据并且从中读取出 public static void main(String[] args) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("D:/test/DateTest.java,true"));//true表示不会删除文件之前所有的内容 BufferedReader br = new BufferedReader( new FileReader("D:/test/DateTest.java")); String s = null; for(int i=1;i<=10;i++){ s = String.valueOf(Math.random()); bw.write(s); bw.newLine(); } bw.flush(); while((s=br.readLine())!=null){ //BufferReader有缓存区的功能,可以读一行 System.out.println(s); } bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } }
2:转换流
package yingjun.io; import java.io.*; public class TestTransForm2 { public static void main(String args[]) { InputStreamReader isr = new InputStreamReader(System.in);//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()); s = br.readLine(); } br.close(); } catch (IOException e) { e.printStackTrace(); } } }
3:数据流
package yingjun.io; import java.io.*; public class TestDataStream { public static void main(String[] args) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); //定义字节数组流 DataOutputStream dos = new DataOutputStream(baos);//套接数据类型流 try { dos.writeDouble(Math.random());//写入double类型数据 dos.writeBoolean(true); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); System.out.println(bais.available()); DataInputStream dis = new DataInputStream(bais); System.out.println(dis.readDouble());//读取double类型数据 System.out.println(dis.readBoolean()); dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); } } }
4:打印流
package yingjun.io; import java.io.*; public class TestPrintStream1 { public static void main(String[] args) { PrintStream ps = null; try { FileOutputStream fos = new FileOutputStream("D:/test/DateTest.java"); ps = new PrintStream(fos); } catch (IOException e) { e.printStackTrace(); } if(ps != null){ System.setOut(ps);//设定System.out输出到ps(原来是在dos) } for(char c = 0; c <= 60000; c++){ System.out.print(c+ " ");//print具有自动的flush功能,所有数据将被写入文件 } } }
package yingjun.io; import java.text.SimpleDateFormat; import java.util.*; import java.io.*; //类似log功能 public class TestPrintStream3 { public static void main(String[] args) { String s = null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { FileWriter fw = new FileWriter ("D:/test/log.java", true);//log 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(); } log.println("==="+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date())+"==="); log.flush(); log.close(); } catch (IOException e) { e.printStackTrace(); } } }
5:对象流
package yingjun.io; import java.io.*; public class TestObjectIO { public static void main(String args[]) throws Exception { T t = new T(); t.k = 111; FileOutputStream fos = new FileOutputStream("D:/test/DateTest.java"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(t); oos.flush(); oos.close(); FileInputStream fis = new FileInputStream("D:/test/DateTest.java"); 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; //transient修饰的成员变量在序列化的时候不考虑 }
相关推荐
在Java编程中,"java.io.FileNotFoundException: ***** (Too many open files)" 是一个常见的错误,意味着程序尝试打开的文件数量超过了操作系统的限制。这个错误通常出现在处理大量文件或长时间运行的程序中,尤其...
对于`OptionalDataException`,一个常见的触发情况是在Java对象序列化过程中。序列化允许Java对象被转换为字节流,以便在网络上传输或存储在文件中。而反序列化就是将字节流恢复为Java对象的过程。如果反序列化的...
在Java编程中,`java.io.NotActiveException`异常通常与输入/输出操作有关,例如网络连接或文件操作。这个异常表明你尝试在一个不活跃的输入流或输出流上执行操作。解决这个问题的关键在于确保在进行读写操作之前,...
在Java编程环境中,进行串口通信时,常常会遇到一个问题:缺少`gnu.io`包,导致无法正常编译或运行程序。这个问题主要出现在使用RXTX库进行串口操作的项目中。RXTX是一个开源的Java库,它提供了与硬件进行串行通信的...
5. **json-20090211.jar**:JSON(JavaScript Object Notation)是数据交换的常见格式,这里可能是用于解析和序列化Socket.IO的事件数据。 为了使用这些库实现Socket.IO通信,开发者首先需要在项目中添加对应的依赖...
为了解决`java.io.WriteAbortedException`异常,一个常见的策略是使用同步块或者锁来确保同时只有一个线程可以访问文件。在Java中,可以使用`java.util.concurrent.locks.ReentrantLock`这样的显式锁来实现线程间的...
Java中的`java.io.EOFException`异常是I/O操作中一个常见的异常,它在输入流到达文件末尾时被抛出。这种异常属于`IOException`的子类,当应用尝试读取超出文件末尾的数据时就会触发。在Java程序中处理文件和网络通信...
java.io.UnsupportedEncodingException是一种在Java程序中常见的运行时异常,通常发生在程序尝试使用其运行环境不支持的字符编码格式进行数据编码或解码操作时。在Java应用程序中,字符编码主要用于文件的读写操作...
9. **IO FAQ(05_IO_faq.avi)**:常见问题解答,可能涵盖异常处理、流的关闭、缓冲区大小选择等问题,帮助解决实际开发中遇到的问题。 10. **总结(10_总结.avi)**:最后的视频是对整个IO系列的回顾,总结关键...
在Java编程中,读取和操作TXT文档是常见的任务,特别是在处理日志、配置文件或者进行数据交换时。本文将详细讲解如何使用Java File类和相关的I/O流来实现这一功能。 首先,让我们理解`java file`的概念。在Java中,...
Java IO(输入输出)操作是Java程序中常见的需求,用于实现数据在内存与外部设备(如磁盘文件、网络连接等)之间的读写操作。Java提供了丰富的IO类库,支持面向流和基于缓冲的IO操作,以及文件和目录的管理功能。...
在Java编程语言中,修改文件编码是一项常见的任务,特别是在处理不同源代码或数据文件时。本文将深入探讨如何使用Java来实现这一功能,主要关注以下几个关键知识点: 1. **字符编码的理解**:字符编码是将字符与二...
Java.io.StreamCorruptedException是Java中处理输入输出流时可能遇到的异常,它通常表示数据在传输或保存过程中已经损坏,或者是格式不正确。这一问题可能发生在序列化和反序列化对象时,也可能发生在文件读写过程中...
import java.io.*; import java.util.zip.*; public class ZipExample { public static void main(String[] args) throws IOException { // 创建 ZipOutputStream 对象 FileOutputStream fos = new ...
这里我们以字节流为例,使用`java.io.FileInputStream`作为读取源文件的输入流,`java.io.FileOutputStream`作为写入目标文件的输出流。 下面是一个简单的文件复制示例: ```java import java.io.*; public class...
在本章中,我们将深入探讨`java.io`包的关键知识点,特别是如何使用`File`类以及各种输入/输出流。 首先,让我们来看一下`File`类。`File`类是`java.io`包的核心组件之一,它可以用来表示文件或目录。通过`File`类...
Java 中序列化 NotSerializableException 问题是 Java 开发中常见的问题之一。 NotSerializableException 是 Java 中的一个异常,它发生在尝试序列化一个不implement Serializable 接口的对象时。今天,我们将讨论 ...
在Java中,IO流操作是用于处理输入与输出的抽象机制,它提供了在不同的数据源和目标之间传输数据的手段。流的概念最早起源于UNIX系统中的管道概念,是一个连续的数据流,可以理解为水流,从源端流向目的端。 一、流...
Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...