最近用到一些java.io包中的一些类接口,所以写了一些东西来复习。
Input和Output是同一类,而Reader和Writer另属同一类
Reader支持16位的Unicode字符的输出,而InputStream只支持8位字符输出。他们的大概结构如下:
InputStream的子类有:
FileInputStream,FilterInputStream,ObjectInputStream,StringBufferInputStream等
OutputStream的子类有:
ByteArrayOutputStream,FileOutputStream,FilterOutputStream,PipedOutputStream,ObjectOutputStream。
Reader的子类有:BufferdReader,InputStreamReader,FilterReader,StringReader,PipedReader,CharArrayReader。
Writer的子类有: BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter。
曾遇到一个面试题:
请选择下面的这却答案:
a. System.out 是一个PrintStream。
b. System.out 是一个OutputStream。
c. System.out 是一个FilterOutputStream。
d. System.out 不是一个PrintStream。
e. System.out 在异常时,将抛出IOExcepton。
由于System.out 是一个PrintStream的一个子类,并且PrintStream对象并没有抛出IOException异常。
所以可以看出答案:a b c
例一:InputStream读取文件的应用:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
*
* @author liugao ec06 cumt
*
*/
public class TestJavaIo {
/**
* @param args
*/
public static void main(String[] args) {
int b=0;
long num=0;
InputStream in=null;
try {
in=new FileInputStream("D:/a.txt");
} catch (FileNotFoundException e) {
System.out.println("文件找不到");
System.exit(-1);
}
try{
while((b=in.read()) !=-1){ //b读取是字符的AI码
System.out.println((char)b);
num++;
}
in.close();
System.out.println();
System.out.println("共读取了" + num + "个字节");
}catch(IOException e){
System.out.println("文件读取错误");
System.exit(-1);
}
}
}
例二:FileReader的应用:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
*
* @author ec06cumt
*
*/
public class TestFileReader {
/**
* @param args
*/
public static void main(String[] args) {
FileReader fr=null;
int c=0;
int ln=0;
try {
fr=new FileReader("D:/a.txt");
while((c=fr.read())!=-1){
System.out.println((char)c);
ln++;
}
fr.close();
//主要这里的ln的值,当有中文字符时,一个中文字符还是算一个,
//但InputStream时就一个中文就两个,由此可以看出Reader和Input的区别
System.out.println("共有:"+ln+"个字符");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
例三:BufferedReader与BufferWriter的应用:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* BufferReader和BufferWriter的应用示例
* @author ec06cumt
*
*/
public class TestBufferedReader {
/**
* @param args
*/
public static void main(String[] args) {
try {
//BuffererReader等就像在原来的字节流的基础上套一个更大的水管,
//让出水量更大读取的速度更快。
BufferedWriter bw=new BufferedWriter(new FileWriter("D:/aa.txt"));
BufferedReader br=new BufferedReader(new FileReader("D://aa.txt"));
String s=null;
for(int i=0;i<=100;i++){
s=String.valueOf(10+(long)(Math.random()*30));
bw.write(s);
bw.newLine(); //创建一个换行的标记
}
bw.flush(); //刷新缓冲区域。
while((s=br.readLine())!=null){ //readLine 就是水管的一个应用吧
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) {
System.out.println("写入错误");
}
}
}
例四:DataStream的应用:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
/**
*
* @author ec06cumt
*
*/
public class TestDataStream {
/**
* @param args
*/
public static void main(String[] args) {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(bos);
try {
// dos.writeFloat((float) Math.random());
// dos.writeLong((long) Math.random());
// dos.writeDouble((double) Math.random());
// dos.writeChar((char) Math.random());
dos.writeShort((short) Math.random());
dos.writeBoolean(true);
//注意ByteArrayInputStream的构造方法是参数要是一个数组
ByteArrayInputStream bais=new ByteArrayInputStream(bos.toByteArray());
DataInputStream dis=new DataInputStream(bais);
System.out.println(dis.available());
//System.out.println(dis.readDouble());
// System.out.println(dis.readInt());
// System.out.println(dis.readFloat());
// System.out.println(dis.readDouble());
// System.out.println(dis.readChar());
System.out.println(dis.readShort());
System.out.println(dis.readBoolean());
bos.close();
bais.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
例五:ObjectStream的应用
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 对象的写入和读取
* @author ec06cumt
*
*/
public class TestObjectStream {
/**
* @param args
*/
public static void main(String[] args) {
T t=new T();
t.k=10;
try {
FileOutputStream fos=new FileOutputStream("D:/testObjectIo.bak");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
FileInputStream fis=new FileInputStream("D:/testObjectIo.bak");
ObjectInputStream bis=new ObjectInputStream(fis);
T tReader= (T) bis.readObject();
System.out.println(tReader.i + " " +tReader.j + " "+tReader.d + " " + tReader.k);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e1){
e1.printStackTrace();
}catch(ClassNotFoundException e2){
e2.printStackTrace();
}
}
}
class T implements Serializable{
int i=2;
int j=4;
double d=2.5;
transient int k=15;
// int k=15;
}
例六:文件的目录复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class JavaIoCopyFile {
/**
* Author:liugao ec06-2 cumt
* @param args
*/
public static void main(String[] args) {
File sourceFile=new File("D:/test");
File targetFile=new File("F:/jstl");
copy(sourceFile,targetFile);
}
private static void copy(File sourceFile, File targetFile) {
File tarpath=new File(targetFile,sourceFile.getName());
if(sourceFile.isDirectory()){
tarpath.mkdir();
File[] dir=sourceFile.listFiles();
for(int i=0;i<dir.length;i++){
copy(dir[i],tarpath);
}
}else{
try {
InputStream is=new FileInputStream(sourceFile);
OutputStream os=new FileOutputStream(tarpath);
byte[] buf=new byte[1024];
int len=0;
while((len= is.read(buf))!=-1){
os.write(buf);
}
System.out.println("复制完成");
is.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e1){
e1.printStackTrace();
}
}
}
}
常用的也就是这些方法吧。。。。
分享到:
相关推荐
- Files类提供了大量静态方法,用于执行文件和目录的基本操作,如复制、移动、删除等。 在阅读《JAVA_IO流学习总结.pdf》时,你可以深入理解上述知识点,并通过实践例子来巩固你的理解。理解并熟练运用Java IO对于...
Java的IO流提供了解决这个问题的工具,如FileInputStream和FileOutputStream。在"复制字体"的项目中,你将学习如何使用这些类进行二进制数据的读取和写入,实现文件的精确复制。 "Socket编程"是网络编程的基础。...
io流是任何一门语言中都非常重要的技术,繁琐的课本介绍非但不能够解决问题,还会造成很多的混淆 该文件将各个io流功能放到一起呈现,方便新手对比学习,当场实践,也方便老手进行全面的复习回顾。简洁易懂、涵盖...
- 文件操作,包括读写文件、复制文件。 - 字节流和字符流的区别,以及它们的常见类如FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等。 - 理解对象序列化和反序列化。 9. **反射** - ...
以下是一些Java考试复习中的关键知识点: 1. **基本概念**:Java分为Java Application(应用程序)和Java Applet(小程序),两者都是用Java编写的程序,但运行环境不同。Application需要main方法作为程序入口,而...
考题要求将.java文件存储到指定目录,这涉及到文件和目录的操作,可以使用`java.io.File`类来创建、复制文件和目录。 总的来说,这些题目涵盖了Java多线程的实现、GUI界面设计与事件处理、数据库操作(JDBC)以及...
Java核心面试知识整理包括了对JVM内存区域、...总结而言,这份面试知识点整理为Java开发者提供了一个全面、系统的复习框架,帮助面试者巩固和加深对Java核心技术的理解,以便在面试中展现出扎实的理论基础和实践能力。
在这个压缩包中,你将找到关于如何使用这些流的源代码示例和相关的文档资料,主要涵盖了文件复制,包括单个文件和多个文件的复制。 1. **字节流**:字节流是基于八位字节的数据流,分为输入流和输出流。Java中的`...
1. **类库**:Java提供了丰富的标准库,包括`java.lang`, `java.util`, `java.io`, `java.net`, `java.awt`和`java.applet`等。这些类库包含了语言核心功能、实用工具、输入输出处理、网络通信、图形用户界面和小...
以下是一份详细的复习大纲,旨在帮助你全面理解和熟练应用JAVA编程语言。 1. **基础语法** - 变量和数据类型:包括基本类型(如int, double, boolean)和引用类型(如String, Class) - 运算符:熟悉算术、比较、...
Java IO提供阻塞IO模型、非阻塞IO模型、多路复用IO模型、信号驱动IO模型和异步IO模型等。Java NIO在JDK 1.4中引入,提供了比传统Java IO更多的性能。NIO的主要特点是基于通道(Channel)和缓冲区(Buffer)的I/O操作...
File类用于文件操作,而IO流分为字节流(InputStream和OutputStream)和字符流(Reader和Writer)。字节流处理二进制数据,而字符流处理文本数据。此外,还有缓冲流(BufferedInputStream, BufferedReader等)用于...
此外,记事本程序可能还会涉及文本格式的处理,比如文本的剪切、复制和粘贴功能。这需要利用Clipboard类来实现剪贴板操作,以及Document类来管理JTextArea中的文本内容。 在编程实践中,良好的代码结构和设计模式也...
从给定文件的标题、描述、标签以及部分内容中整理出的Java核心知识点如下: 首先,标题中的"JAVA核心知识点整理.pdf"说明这份文档是一个...这份文档无疑为想要精进Java技能的开发者提供了一个全面的复习和学习资源。
2. 文件操作:创建、读写、复制文件,使用File类进行文件和目录操作。 3. 缓冲流:提高读写效率,如BufferedReader、BufferedWriter。 4. 序列化与反序列化:了解ObjectOutputStream和ObjectInputStream的作用。 五...
5. **IO流**:Java的IO流用于读取和写入数据,如文件操作。案例可能包括读取文本文件、写入数据到文件、复制文件等,让你熟悉字节流和字符流的区别,以及如何进行缓冲区操作。 6. **线程并发**:Java提供了强大的...
Java的IO(输入/输出)是与文件系统和网络通信打交道的基础,书中提到了各种IO类的使用和区别。 在企业实战面试题方面,书中列举了大量真实案例,包括数据库知识、Spring等Java框架以及当时流行的最新技术,如Dubbo...
7. **IO流**:Java的输入/输出系统是面试中的常见话题,包括字节流和字符流的区别,缓冲流的使用,以及File类、RandomAccessFile类的使用。 8. **反射机制**:反射允许程序在运行时动态访问和修改类的信息,理解...