IO流主要包括以下内容:
(1).使用File类进行文件操作。
(2).使用字节流读写文件。
(3).使用字符流读写文件。
使用File类操作目录:
File类主要常量及方法 :
方法或常量 | 类型 | 描述 |
String separator | 常量 | 文件路径分隔符 |
public File(String filename) | 构造方法 | 创建File类对象并传入完整路径 |
public boolean createNewFile() | 方法 | 创建新文件 |
public boolean delete() | 方法 | 删除文件 |
public boolean exists() | 方法 | 判断文件是否存在 |
public boolean isDirectory() | 方法 | 判断给定的路径是否为目录 |
public long length() | 方法 | 返回文件的大小 |
public String[] list() | 方法 | 列出指定目录的全部内容,只列出名称 |
public File[] listFiles() | 方法 | 列出指定目录的全部内容 |
public boolean mkdir() | 方法 | 创建目录 |
public boolean renameTo(File dest) | 方法 | 为已有的文件重命名 |
示例:
判断文件是否存在,不存在则创建,存在则删除
package com.soft.test;
import java.io.File;
import java.io.IOException;
/**
* 使用File类操作目录
* @Author: liuxinghui
* @Date: Mar 21, 2012
* @Version: 2.0
* @Despcrition:
*/
public class Test1 {
public static void main(String[] args) {
File f=new File("c:/1.txt");
if(f.exists()){
f.delete();
}else{
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("文件的名称"+f.getName());
System.out.println("文件的路径"+f.getPath());
System.out.println(f.canWrite()?"文件可写":"文件不可写");
System.out.println(f.isDirectory()?"文件是目录":"文件不是目录");
System.out.println("文件的长度:"+f.length());
}
}
列出指定目录下的文件:
package com.soft.test;
import java.io.File;
/**
* 列出指定目录下的文件(File类只是针对文件进行操作,对文件内容操作须使用RandomAccessFile类)
* @Author: liuxinghui
* @Date: Mar 21, 2012
* @Version: 2.0
* @Despcrition:
*/
public class Test3 {
public static void main(String[] args) {
File f=new File("d:");
String[] str=f.list();
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
}
}
RandomAccessFile类读写文件
方法 | 类型 | 描述 |
public RandomAccessFile(File f,String mode) | 构造方法 | 接收File类,并设置r为只读、w为只写、rw为读写模式 |
public RandomAccessFile(String name,String mode) | 构造方法 | 输入固定的文件路径并设置模式 |
public int read(byte[] b) | 方法 | 将内容读取到byte数组中 |
public final byte readByte() | 方法 | 读取一个字节 |
public final int readInt() | 方法 | 从文件中读取整型数据 |
public void seek(long pos) | 方法 | 设置读指针的位置 |
public final void writeBytes(String s) | 方法 | 将一个字符串写入文件中 |
public final void writeInt(int v) | 方法 | 将一个整型数据写入文件 |
public int skipBytes(int n) | 方法 | 指针跳过多少个字节 |
例:
package com.soft.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* RandomAccessFile类写入数据
* @Author: liuxinghui
* @Date: Mar 21, 2012
* @Version: 2.0
* @Despcrition:
*/
public class Test4 {
public static void main(String[] args) {
File f=new File("c:"+File.separator+"demo.txt");
try {
RandomAccessFile rdf=new RandomAccessFile(f,"rw");
String name=null;
int age=0;
name="tome";
age=18;//整数在内存中占四个字节大小
try {
rdf.writeBytes(name);
rdf.writeInt(age);
name="mike";
age=90;
rdf.writeBytes(name);
rdf.writeInt(age);
rdf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
字节流:InputPutStream和OutputStream
方法 | 描述 |
public void close() | 关闭输入流 |
public abstract int read() | 以数字的方式读取内容 |
public int read(byte[] b) | 将内容读到byte数组中,同时返回读入的个数 |
方法 | 描述 |
public void close() | 关闭输出流 |
public abstract void write(int b) | 在数据流中写入一个字节 |
public void write(byte[] b,int off,int len) | 在数据流中写入一个指定范围的byte数组 |
public void write(byte[] b) | 在数据流中写入一个byte数组 |
public void flush() | 刷新缓冲区 |
package com.soft.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* FileInputStream和FileOutputStream
* @Author: liuxinghui
* @Date: Mar 21, 2012
* @Version: 2.0
* @Despcrition:
*/
public class Test6 {
public static void main(String[] args) throws Exception {
File f=new File("c:/demo.txt");//打开文件
OutputStream os=new FileOutputStream(f);
String str="hello word!";
os.write(str.getBytes());
InputStream is=new FileInputStream(f);
byte[] b=new byte[1024];
int len=is.read(b);
System.out.println(new String(b,0,len));
}
}
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in,int size)
第一种形式的构造方法创建带有32个字节缓冲区的缓冲流,第二种形式的构造方法按指定的大小来创建缓冲区
BufferedOutputStream(OutputStream in)
BufferedOutputStream(OutputStream in,int size)
第一种形式的构造方法创建带有32个字节缓冲区的缓冲流,第二种形式的构造方法按指定的大小来创建缓冲区
package com.soft.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 文件的读写操作
* @Author: liuxinghui
* @Date: Mar 21, 2012
* @Version: 2.0
* @Despcrition:
*/
public class Test7 {
public static void main(String[] args) throws IOException {
byte[] b=new byte[1];
InputStream is=new FileInputStream("c:/demo.txt");
OutputStream os=new FileOutputStream("c:/demo1.txt");
BufferedInputStream bui=new BufferedInputStream(is);
BufferedOutputStream buo=new BufferedOutputStream(os);
while(bui.read(b)!=-1){
buo.write(b);
}
buo.flush();//强制输出缓冲区的数据
bui.close();
buo.close();
}
}
字符流
方法 | 描述 |
public abstract void close() | 关闭输入流 |
public int read() | 读取单个字符 |
public int read(char[] c) | 将内容读取到字符数组中,并返回读取的长度 |
方法 | 描述 |
public abstract void close() | 关闭输出流 |
public void write(String str) | 输出字符串 |
public void write(char[] c) | 输出字符数组 |
public abstract void flush() | 强制清空缓存 |
File f = new File("d:/demo.doc");
Writer out = new FileWriter(f);
out.write("hello world");
out.close();
Reader reader = new FileReader(f);
char c[] = new char[1024];
int len = reader.read(c);//将内容读取到字符数组中
System.out.println(new String(c,0,len));
out.close();
reader.close();
File f = new File("d:/demo.txt");
OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(f));
os.write("hello world");
os.close();
File f = new File("d:/demo.txt");
//字节流变为字符流
InputStreamReader reader= new InputStreamReader(new FileInputStream(f));
char[] c = new char[1024];
int len = reader.read(c);
System.out.println(new String(c,0,len));
reader.close();
方法 | 类型 | 描述 |
public BufferedReader(Reader in) | 构造方法 | 接收Reader类实例 |
public String readLine() | 方法 | 从缓冲区中读取一行文本 |
public int read() | 方法 | 读取单个字符 |
public int read(char[] c,int off,int len) | 方法 | 读取字符数组的一部分 |
方法 | 类型 | 描述 |
public BufferedWriter(Writer out) | 构造方法 | 接收Writer类实例 |
public void newLine() | 方法 | 写入一个行分隔符 |
public void write(int c) | 方法 | 写入单个字符 |
public void write(char[] c,int off,int len) | 方法 | 写入字符数组的一部分 |
public void write(String s,int off,int len) | 方法 | 写入字符串的一部分 |
File f = new File("d:/demo.txt");
FileWriter writer = new FileWriter(f);
BufferedWriter bufWriter = new BufferedWriter(writer);
bufWriter.write("hello world");
bufWriter.close();
writer.close();
FileReader reader = new FileReader(f);
BufferedReader bufReader = new BufferedReader(reader);
System.out.println(bufReader.readLine());
PrintWriter pw = new PrintWriter("d:/test.txt");
pw.println("hello world");
pw.write("java");
pw.flush();
pw.close();
字节流 | 字符流 |
以字节为单位输入输出数据 | 以字符为单位输入输出数据 |
操作时不会用到缓冲区(内存) | 操作时使用了缓冲区(内存) |
字节流按照8位传输 | 字符流按照16位传输 |