File IO

File IO

文件的操作和目录

1.定义:

File对象既可以表示文件,也可以表示目录,一个File对象可以代表一个文件或目录

创建一个File对象的语法格式如下

 File file = new File(String pathName);
 //String pathName表示所指向的文件路径名

示例:

/**
	 * 显示文件信息
	 * @param args
	 */
	public void showFileInfo(File file) {
		if (file.exists()) {		//判断文件或目录是否存在
			if (file.isFile()) {	//如果是文件
				System.out.println("名称:"+file.getName());
				System.out.println("相对路径:"+file.getPath());
				System.out.println("绝对路径:"+file.getAbsolutePath());
				System.out.println("文件大小:"+file.length()+"字节");
			}
			if (file.isDirectory()) {
				System.out.println("此文件是目录");
			}
	
		}else {
			System.out.println("文件不存在!");
		}
	}
	
	public static void main(String[] args) {
		FileMethods fm=new FileMethods();
		File file=new File("D:\\myDoc\\hello.txt");
		fm.showFileInfo(file);
	}

File的常用方法

方法名称说明
boolean exists()判断文件或目录是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
String getPath()返回此对象表示的文件的相对路径名
String getAbsolutePath()返回此对象表示的文件的绝对路径名
String getName()返回此对象表示的文件或目录的名称
boolean delete()删除此对象指定的文件或目录
boolean createNewFile()创建名称的空文件,不创建文件夹
long length()返回文件的长度,单位为字节,若文件不存在,则返回OL

示例:

public class FileMethods2 {
	/**
	 * 创建文件夹的方法
	 * @param args
	 */
	public void creat(File file) {
		if (!file.exists()) {
			try {
				file.createNewFile();
				System.out.println("文件已创建!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 删除文件夹
	 * @param args
	 */
	public void delete(File file) {
		if (file.exists()) {
			file.delete();
			System.out.println("文件夹已删除!");
		}
	}
	/**
	 * 显示信息
	 * @param args
	 */
	public void showFileInfo(File file) {
		if (file.exists()) {
			System.out.println("名称:"+file.getName());
			System.out.println("相对路径:"+file.getPath());
			System.out.println("绝对路径:"+file.getAbsolutePath());
			System.out.println("文件大小:"+file.length());
			if (file.isDirectory()) {
				System.out.println("此文件是目录");
			}
		}else {
			System.out.println("文件不存在!");
		}		
	}	
	public static void main(String[] args) {
		File file=new File("D:\\myDoc\\test.txt");
		FileMethods fm=new FileMethods();
		fm.showFileInfo(file);
		
}

文件的流

1.定义:

流是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。一个流是一个输入设备或输出设备的抽象表示。

2.分类:

​ 按照流的流向进行划分,可以分为输入流和输出流。

​ 输入流:只能从中读取数据,而不能向其中写入数据

	OutputStream和Writer作为基类

​ 输入流示例:

public class FileInputStreamTest {
	public static void main(String[] args) throws IOException{
		//声明流对象
		FileInputStream fiS=null;
		try {
			fiS=new FileInputStream("D:\\myDoc\\hello.txt");
			int date;
			System.out.println("可读取的字节数:"+fiS.available());
			System.out.println("文件内容为:");
			//循环读取数据
			while ((date=fiS.read())!=-1) {
				System.out.println((char)date+" ");		
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if (fiS!=null) {
					fiS.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

​ 输出流:只能向其中写入数据,而不能从中读取数据

	InputStream和Reader作为基类	

​ 输出流示例:

public class FileOutputStream {
	public static void main(String[] args) {
		java.io.FileOutputStream fos=null;
		try {
			String str="好好学习Java";
			byte[] words=str.getBytes();
			//创建流对象,以追加方式写入文件
			fos=new java.io.FileOutputStream("D:\\myDoc\\hello.txt");
			//写入文件
			fos.write(words,0,words.length);
			System.out.println("hello文件已更新!");
		} catch (IOException e) {
			System.out.println("创建文件时出错!");
		}
		finally {
			try {
				if (fos!=null) {
					fos.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}
	

​ 按照所操作的数据单元的不同,流又可划分字节流和字符流

​ 字节流:

​ 操作的最小数据单元为8位的字。

​ 字符流:

​ 操作的最小数据单元为16为的字符

示例:

public class FileReader {
	public static void main(String[] args) {
		//创建fielreader对象
		Reader fr=null;
		StringBuffer sbf=null;
		try {
			fr =new java.io.FileReader("D:\\myDoc\\简介.txt");
			char ch[] =new char[1024];
			sbf=new StringBuffer();
			int length=fr.read();
			while (length!=-1) {
				sbf.append(ch);
				length=fr.read();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if (fr!=null) {
					fr.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

文件的读写

字节流读写文本文件

​ 1.读取文件

​ 字节输入流InputStream的作用就是将文件中的数据输入到内部存储器中(简称内存),它提供了一系列读取数据的有关方法

字节流读取常用方法:

方法名称说明
int read()读取一个 字节数据
int read(byte[] b)将数据读取到字节数据中
int read(byte[] b,int off,int len)从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始
void close()关闭输入流
int available()返回输入流读取的估计字节数

​ 字节输入流FileInputStream类

​ 在实际应用中,我们通常使用InputStream的子类FileInputStream类来实现文本文件内容的读取.

常用的构造方法有以下两个:

(1) FileInputStream (File file),file 指定文件数据源

	File file = new File("C:\\test.txt");
	InputStream fileObject = new 			FileInputStream(file);

(2)使用 FileInputStream (String name),name指定文件数据源 ,包含路径信息

InputStream fileObject = new FileInputStream("C:\\test.txt");

(3)利用文件输入流的方法读取文本文件的数据

fileObject.avaiable();//可读取的字节数
fileObject.read();//读取文件的数据

(4)关闭文件输入流的对象

fileObject.close();

示例:

public static void main(String[] args) {
		//声明流对象
		FileInputStream fis =null;
		try {
			fis = new FileInputStream("E:\\save.txt");
			int data;
			System.out.println("可读取的字节数:"+fis.available());
			System.out.print("文件内容:");
			//循环读取数据
			while((data=fis.read())!=-1) {
				System.out.print((char)data+"");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(fis!=null) {
					fis.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

2.写入文件

(1)字节输出流OutputStream类

​ 字节输出流OutputStream类的作用是把内存的数据输出到文件中

字节流写入常用方法:

方法名称说明
void write(int c)写入一个字节数据
void write(byte[] buf)写入数据buf的所有字节
void write(byte[] b,int off,int len)将字节数组中从off位置开始,长度为len的字节数据输出带输出流中
void close()关闭输出流

(2)字节输出流FileOutputStream类

​ 我们通常使用OutputStream的子类FileOutputStream类来实现文本文件内容的写入。语法:

File file = new File("C:\\test.txt");
FileOutputStream fos = new FileOutputStream(file);

(3)利用文件输出流的方法写入数据到文本文件

String str ="好好学习!";
byte[] words =str.getBytes();
//利用write方法将数据写入文件中
fos.write(words,0,words.length);

(4)关闭文件输出流的对象

fileObject.close();

示例:

public static void main(String[] args) {
		java.io.FileOutputStream fos=null;
		try {
			String s ="好好学习Java";
			byte[] words =s.getBytes();//字节数组
			//创建流对象追加方式写入文件
			fos= new java.io.FileOutputStream("E:save.txt",true);
			//写入文件
			fos.write(words,0,words.length);
			System.out.println("save文件已经更新!");
		} catch (IOException e) {
			System.out.println("创建文件出错!");
		}finally {
			try {
				if(fos!=null) {
					fos.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}
字符流读写文本文件

1.读取文件

(1)字符输入流Reader类

字符流读取常用方法:

方法名称说明
int read()从输入流中读取单个字符
int read(byte[] c)从输入流中读取c.length长度的字符,保存在字符数组c中,返回实际读取的字符数
read(char[] c,int off,int len)从输入流读取最多len长度字符,保存到字符数据c中,保存位置从off位置开始,返回实际读取的字符长度
void close()关闭流

(2)字符输入流FileReader类

​ FileReader类是Reader类的子类,语法:

Reader fr = new FileReader"C:\\\test.txt";

(3)利用文件输入流的方法读取文本文件的数据

int.read();//读取单个字符

(4)关闭相关流的对象

fr.close();

示例:

public class FileReader {
	public static void main(String[] args) {
		java.io.Reader fr =null;
		StringBuffer sbf=null;
		try {
			fr = new java.io.FileReader("E:\\简介.txt");
			char ch[] = new char[1024];//创建字符数组作为中转站
			sbf = new StringBuffer();
			int length =fr.read(ch);//将字符读出
			//循环读取并追加字符
			while((length!=-1)) {
				sbf.append(ch);//追加
				length=fr.read();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(fr!=null) {
					fr.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

2.写入文件

(1)字符输出流Writer类

​ Writer类是向文件写入数据的字符流,常用方法

字符流读取常用方法:

方法名称说明
write(String str)将str字符串里包含的字符输出到指定的输出流中
write(String str,int off,int len)将str字符串里从off位置开始长度为len的字符输出到输出流
void close()关闭输出流
void flush()刷新输出流

(2)字符输出流FileWriter类

​ FileWriter类是Writer的子类,语法:

Writer fr = new FileWriter("C:\\test.txt");

(3)创建一个FileWriter的对象

Writer fr = new FileWriter("C:\\test.txt");

(4) 关闭文件输出流的对象

bw.flush();//刷新该流的缓冲
fw.close();//关闭此流

示例:

public class FileWriter {
	public static void main(String[] args) {
		java.io.Writer fw=null;
		try {
			//创建一个FileWriter对象
			fw = new java.io.FileWriter("E:\\save.txt");
			//写入信息
			fw.write("我热爱我的团队!");
			fw.flush();//刷新缓冲区
			System.out.println("写入成功!");
		} catch (IOException e) {
			System.out.println("文件不存在!");
		}finally {
			try {
				if(fw!=null) {
					fw.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}

二进制文件的读写

使用字节流类DataInputStream读二进制文件

DataInputStream类是FileInputStream的子类,它是FileInputStream的扩展

具体操作步骤如下

(1)引入相关类

import java.FileInputStream;
import java.DataInputStream;

(2)创建一个数据输入流的对象

FileInputStream fis = new FileInputStream("C:\\HelloWorld.class");
DataInputStream dis = new DataInputStream(fis);

(3)利用数据输入流的方法读取文本文件的数据

dis.read();//读取数据字节

(4)关闭相关流的对象

dis.close();//关闭数据输入流
使用字节流类DataOutputStream写二进制文件

DataOutputStream类是FileOutputStream的子类,它是FileOutputStream类的扩展

具体操作步骤如下

(1)引入相关类

import java.FileOutStream;
import java.DataOutStream;

(2)创建一个数据输入流的对象

FileOutputStream fos = new FileOutputStream("C:\\HelloWorld.class");
DataOutputStream out = new DataOutputStream(fis);

(3)利用数据输入流的方法写文本文件的数据

out.write(1);//将指定字节数据写入

(4)关闭相关流的对象

out.close();//关闭数据输入流

示例:

public class DataOutputStream {
	public static void main(String[] args) {
		java.io.DataOutputStream out =null;
		java.io.DataInputStream dis=null;
		try {
			//创建输入流对象
			java.io.FileInputStream fis = new FileInputStream("E:\\save.txt");
			dis = new DataInputStream(fis);
			//创建输出流对象
			java.io.FileOutputStream outFile = new FileOutputStream("E:\\save1.txt");
			out = new java.io.DataOutputStream(outFile);
			int temp;
			//读取文件
			while((temp=dis.read())!=-1) {
				out.write(temp);
			}
			System.out.println("成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(dis!=null) {
					dis.close();
				}if(out!=null) {
					out.close();
				}
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值