Java基础 file IO

File类
手机里的文件
java.io.File
代表磁盘上的一个文件或者目录的对象
该对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等,调用它的方法则可以完成对文件或目录的常用管理操作,例如,创建、删除等操作。

File类的属性
pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串
pathSeparatorChar 与系统有关的路径分隔符
separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串
separatorChar 与系统有关的默认名称分隔符

File类的构造器
File(String pathname)
File(String parent, String child)
File(File parent, String child)

File类常用方法
long length() 字节长度
boolean canRead() 是否可读
boolean canWrite( ) 是否可写
boolean createNewFile() 创建新文件
boolean delete() 删除文件

I/O流
什么是流
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。
即数据在两个设备间的传输称为流,流的本质是数据传输。
流的分类
1 传输方向不同
输入流
输出流
2 处理数据类型
字节流
字符流
输入流:读取数据
在Java中,程序可以打开一个输入流,输入流的信息源可以位于文件、内存或网络套接字(socket)等地方,信息源的类型可以是包括对象、字符、图像、声音在内的任何类型。一旦打开输入流后,程序就可从输入流读数据。
输出流:写出数据
程序也能通过打开一个输出流并顺序地写入数据来将信息送至目的端。

字节流
传输的数据单位是字节,也意味着字节流能够处理任何一种文件
字节流的组成
字节输入流:InputStream
字节输出流:OutputStream

FileInputStream文件字节输入流
构造器
FileInputStream(String filepath)
FileInputStream(File file)
常用方法
int read() 从此输入流中读取一个数据字节
int read(byte[] buf) 从此输入流中将最多b.length个字节的数据读入一个byte数组中
int read(byte[] buf, int off, int len) 从此流中将最多len个字节的数据读入一个byte数组中
void close() 关闭此文件输入流并释放与此流有关的所有系统资源

FileOutputStream文件字节输出流
构造器
FileOutputStream(String path)
FileOutputStream(File file)
FileOutputStream(String path,boolean append) 可以在文件尾部追加
FileOutputStream(File file,boolean append) 可以在文件尾部追加

常用方法
void write(int b) 将指定字节写入此文件输出流
void write(byte[] b) 将b.length个字节从指定byte数组写入此文件输出流中
void write(byte[] b, int off, int len) 将指定byte数组中从偏移量off开始的len个字节写入此文件输出流
void close() 关闭此文件输入流并释放与此流有关的所有系统资源

ObjectInputStream对象字节输入流
构造器
ObjectInputStream(InputStream in)
常用方法,不仅继承InputStream的方法添加自己的方法
Object readObject() 从ObjectInputStream读取对象(反序列化)
int read() 读取数据字节
int read(byte[] buf, int off, int len) 读入byte数组
double readDouble() 读取一个64位的double值
int readInt() 读取一个32位的int值

ObjectInputStream
ObjectOutputStream对象字节输出流
构造器
ObjectOutputStream(OutputStream out)
常用方法,不仅继承OutputStream的方法添加自己的方法
void write(int val) 写入一个字节
void write(byte[] buf) 写入一个byte数组
void write(byte[] buf, int off, int len) 写入字节的子数组
void writeLong(long val) 写入一个64位的long值
void writeObject(Object obj) 将指定的对象序列化入磁盘

字符流 一次一个字符
字符流处理的单元字符,分别操作字符、字符数组或字符串
字符流的组成
字符输入流:Reader
字符输出流:Writer

FileReader文件字节输入流
构造器
FileReader(File file)
FileReader(String fileName)
常用方法
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
void close() 关闭该流并释放与之关联的所有资源

FileWriter文件字符输出流
构造器
FileWriter(File file)
FileWriter(String fileName)
FileWriter(File file, boolean append) 可以在文件尾部追加
FileWriter(String fileName, boolean append) 可以在文件尾部追加
常用方法
void write(int c) 写入单个字符
void write(char[] cbuf) 写入字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分
void write(String str) 写入字符串
void write(String str, int off, int len) 写入字符串的某一部分
void flush() 刷新该流的缓冲
void close() 关闭此流,但要先刷新它

InputStreamReader字符输入流
是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符
构造器
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charset)
常用方法
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分

OutputStreamReader字符 输出
是字符流通向字节流的桥梁:可使用指定的charset将要写入流中的字符编码成字节
构造器
OutputStreamReader(OutputStream out)
OutputStreamReader(OutputStream in,String charset)
常用方法
void write(int c) 写入单个字符
void write(char[] cbuf) 写入字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分

BufferedReader字符过滤流
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
构造器
BufferedReader(Reader in)
常用方法
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
String readLine() 读取一个文本行

BufferedWriter字符过滤流
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
构造器
BufferedWriter(Writer out)
常用方法
void write(char[] cbuf) 写入字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分
void newLine() 写入一个行分隔符
void flush() 刷新该流的缓冲

file使用
package rili;

import java.io.File;
import java.io.IOException;

/**
 * 
 * 测试File 文件夹类
 * 所有与文件夹相关的操作都在这个类下
 *
 */
public class TestFile
{
	public static void main(String[] args) throws IOException
	{	//创建一个file的对象 表示这个文件 或者这个文件夹  File 3个构造器
		File f=new File("D:/资料/java作业/zuoye1/Test4.java");
		File f2=new File("D:/资料/java作业/zuoye1");
		File f3=new File(f2, "Test4.java");
		File f4=new File(f2, "Test5555.java");
		File f5=new File("D:/资料/java作业/aa/bb/cc");
		//在这个文件夹下创建这个文件 但是会有io异常抛出需要捕获
		f4.createNewFile();
		//删除文件
		f4.delete();
		//创建目录   单个文件目录
		f5.mkdir();
		//创建目录   多个文件目录
		f5.mkdirs();
		
		//判断这个文件是不是狭义上的文件
		if (f.isFile())
		{
			System.out.println("是一个文件");
		}
		//判断文件是不是一个目录
		if (f2.isDirectory())
		{
			System.out.println("是一个目录");
		}
	}
}


package rili;

import java.io.File;

/**
 * 
 * 用Fiel来递归打印树状目录
 *
 */
public class TestShu
{
	public static void main(String[] args)
	{
		File file=new File("D:/资料");
		printfile(file,0);
	}
	/**
	 * 递归打印树状目录
	 * @param file 目录地址
	 * @param levei 
	 */
	static void printfile(File file,int levei)
	{	//循环打印前面的横杠
		for (int i = 0; i < levei; i++)
		{	
			System.out.print("-");
		}
		//打印出所有的目录名字
		System.out.println(file.getName());
		//判断是不是目录
		if (file.isDirectory())
		{	//创建一个数组将文件名都放进去
			File[] files=file.listFiles();
			//递归 将文件加一在次循环
			for (File temp:files)
			{
				printfile(temp, levei+1);
			}
		}
	}

static void printfile(File dir)
	{	//将文件下的目录都导出来
		File[] file=dir.listFiles();
		//判断文件是不是为空
		if (file!=null)
		{	//循环遍历这个目录数组
			for (File file2:file)
			{
				printfile(file2);
				System.out.println(file2.getAbsolutePath());
			}
			
		}
	
	}
}

package filetest;

import java.io.File;
import java.util.Date;

//测试File类文件加
public class TestFile
{
	public static void main(String[] args)
	{
		File file1 = new File("D:/job/javajob//学习1");
		File file = new File("D:/job/javajob");
		// isHidden()测试查看文件是不是隐藏文件
		System.out.println(file.isHidden());
		// lastModified获取文件最后一次的修改时间
		long l = file.lastModified();
		System.out.println(new Date(l));
		// list获取文件加下所有的子目录名称
		String[] mulu = file.list();
		for (String str : mulu)
		{
			System.out.println(str);
		}

		// listFiles获取指定文件夹下的所有子文件
		// getAbsolutePath获取文件的绝对路径
		File[] file2 = file.listFiles();
		for (File file3 : file2)
		{
			System.out.println("2" + file3.getAbsolutePath());
		}
		// listRoots获取文件的根目录
		File[] file4 = file.listRoots();
		for (File file5 : file4)
		{
			System.out.println("3" + file5.getAbsolutePath());
		}
		// exists判断某个文件是否存在
		System.out.println("4" + file.exists());
		// mkdir创建单个和多个文件 加个s创建多个
		System.out.println("5" + file.mkdir());
		file1.delete();
	}
}
IO使用
package filetest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;

//测试io流
public class IO
{
	public static void main(String[] args) throws IOException, InterruptedException
	{	//创建一个FileInputStream 字节对象
		FileInputStream a=new FileInputStream("D:/xuexi/1120/1.txt");
		//用byte数组表示需要一次接收多长的内容 内容保存在数组中
		byte[] b=new byte[2048];
		//read 不带参数表示获取第一个字节的内容 且i=-1的时候表示接收完全部内容
		int i=a.read();
		//一次接收b数组长度的内容
		a.read(b);
		//打印这个位置的字节 强转为char
		System.out.println((char)b[0]);
		//用while循环将内容一个一个弄出来
		while ((i=a.read())!=-1)
		{
			System.out.print((char)i);
			
		}
		//创建一个路径对象
		File file=new File("E:/1.txt");
		//字节输出流  在文件后面追加
		FileOutputStream fos=new FileOutputStream(file,true);
		//用字符串转数组加入
		String string="asd ada ";
		byte[] te=string.getBytes();
		//追加的内容为上面的数组b的字节内容
		fos.write(te);
		
		//关闭流
		fos.close();
		a.close();
		//创建一个字符输入流
		FileReader f=new FileReader(file);
		//读取当个字符内容
		f.read();
		//将内容读入到char数组中 需要定义数组的长度 否则会很多空内容
		char[] cc=new char[30];
		//将内容读取到数组中
		f.read(cc);
		for (char aa:cc)
		{
			System.out.println(aa);
		}
		
		//关闭流
		f.close();
		//创建一个字符输出流 并且在后面增加内容
		FileWriter f1=new FileWriter(file,true);
		//向文件里写入内容
		f1.write("我爱你");
		//关闭流
		f1.close();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值