关闭

IO流的总结

776人阅读 评论(1) 收藏 举报


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

uInputStream:   程序可以从中连续读取字节的对象称为字节输入流
uInputStream 的主要方法

方法

描述

public void close()

关闭输入流

public abstract int read()

以数字的方式读取内容

public int read(byte[] b)

将内容读到byte数组中,同时返回读入的个数

  OutputStream:   程序可以向其中连续写入字节的对象称为字节输出流
uOutputStream 的主要方法

方法

描述

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()

刷新缓冲区

InputStream和OutputStream是两个抽象类
使用子类FileInputStream和FileOutputStream分别读取和写入文件的内容
列:
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和BufferedOutputStream可以增加内存缓冲区
BufferedInputStream构造方法

BufferedInputStream(InputStream in)

 BufferedInputStream(InputStream in,int size)

 第一种形式的构造方法创建带有32个字节缓冲区的缓冲流,第二种形式的构造方法按指定的大小来创建缓冲区

BufferedOutputStream构造方法

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();
}
}

字符流
Reade和Writer是两个抽象类,分别与InputStream和OutputStream对应
reader的主要方法:

方法

描述

public abstract void close()

关闭输入流

public int read()

读取单个字符

public int read(char[] c)

将内容读取到字符数组中,并返回读取的长度

 
nWriter主要方法

方法

描述

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();

InputStreamReader和OutputStreamWriter是字节流和字符流之间的转换类
 
InputStreamReader是将输入的字节流变为字符
OutputStreamWriter是将输出的字符流变为字节流
字符流转换字节流
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();




BufferedReader和BufferedWriter是带缓冲区的Reader和Writer
BufferedReader主要方法

方法

类型

描述

public BufferedReader(Reader in)

构造方法

接收Reader类实例

public String readLine()

方法

从缓冲区中读取一行文本

public int read()

方法

读取单个字符

public int read(char[] c,int off,int len)

方法

读取字符数组的一部分

nBufferedWriter主要方法

方法

类型

描述

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是Writer的子类,其作用是将格式化对象打印到一个文本输出流
PrintWriter主要方法:print()、println()、write()
 PrintWriter pw = new PrintWriter("d:/test.txt");
 pw.println("hello world");
 pw.write("java");
 pw.flush();

 pw.close();

字节流与字符流区别

字节流

字符流

以字节为单位输入输出数据

以字符为单位输入输出数据

操作时不会用到缓冲区(内存)

操作时使用了缓冲区(内存)

字节流按照8位传输

字符流按照16位传输

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:95813次
    • 积分:1744
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:56篇
    • 译文:0篇
    • 评论:24条
    文章分类
    最新评论