Java基础之IO

IO流

  1. File类
  2. 字节流
  3. 字符流

1. File

File类的对象主要用来获取文件本身的一些信息,例如文件所在目录、文件的长度或者文件的读写权限等,不涉及对文件的读写操作。要对文件进行读写操作需要使用IO流。

创建一个File对象的构造方法有3种:
  • File(String filename);
  • File(String directoryPath,String filename);
  • File(File dir,String filename);
    其中filename是文件名,directorypath是文件路径,dir为一个目录。使用File(String filename)创建文件时,该文件被认为与当前应用程序在同一目录中。
1.1文件的属性

可以使用File类的一些方法来获取文件本身的一些信息

File类的常用方法
  • public String getName() 获取文件的名字
  • public boolean canRead() 判断文件是否可读
  • public boolean canWrite() 判断文件是否可被写入
  • public boolean exists() 判断文件是否存在
  • public long length() 获取文件的长度(单位是字节)
  • public String getAbsolutePath() 获取文件的绝对路径
  • public String getParent() 获取文件的父目录
  • public boolean isFile() 判断文件是否是一个普通文件而不是目录
  • public boolean isDirectory() 判断文件是否是一个目录
  • public boolean isHidden() 判断文件是否是隐藏文件
1.2 目录
创建目录

File对象调用方法 public boolean mkdir() 创建一个目录,如果创建成功返回true,否则返回false(如果该目录已存在将返回false)

如果File对象是一个目录,那么该对象调用下述方法列出该目录下的文件和子目录

  • public String[] list() 用字符串形式返回目录下全部文件
  • public File[] listFiles() 用File对象形式返回目录下的全部文件
import java.io.File;

/*
 * 使用递归打印目录树
 * list():列出下级名称
 * listFiles():列出下级File对象
 */
public class TestFileTree {
	public static void main(String[]args) {
		File f=new File("F:\\大一上学期工作学习任务");
		printFile(f,0);
	}
	
	static void printFile(File file,int level) {
		//输出层数
		for(int i=0;i<level;i++)
			System.out.print("-");
		System.out.println(file.getName());
		if(file.isDirectory()) {
			File[] files=file.listFiles();//是获取该目录下所有文件和目录的绝对路径
			for(File temp:files) {
				printFile(temp,level+1);
				;
			}
		}
	}
}
1.3 文件的创建与删除

当使用File类创建一个文件对象后,如

File file=new File("C:/myFile""abc.txt");

如果目录下没有名为abc.txt的文件,文件对象file调用方法

  • public boolean createNewFile();

就可以在C:\myFile目录下新建名为abc.txt 的文件。
文件对象file调用方法

  • public boolean delete()

可以删除当前文件。

2.字节流

字节流分为字节输出流和字节输入流。FileOutputStream类(字节输出流)是OutputStream的抽象类,FileInputStream(字节输入流)是InputStream的子类
InputStream和OutputStream都是抽象类

2.1文件字节输入流

使用输入流通常包括4个基本步骤

  • 设定输入流的源
  • 创建指向源的输入流
  • 让输入流读取源中的数据
  • 关闭输入流
FileInputStream的构造方法
  • FileInputStream(String name)
  • FileInputStream(File file)
    第一种构造方法使用给定的文件名name创建FileInputStream流,第二个构造方法使用File对象创建FileINputStream流。参数name和file指定的文件称为输入流的源。
FileInputStream的常用方法
  • int read() 从源中读取单个字节,该方法返回类型为字节,如果没有读出字节则返回-1
  • int read(byte [] b) 从源中读取b.length个字节到字节数组b中,如果读取成功则返回实际读取的字节数目。如果到达文件末尾则返回-1
  • int read(byte [] b,int off,int len) 从源中读取len个字节到字节数组b中,如果读取成功个则返回实际读取的字节数目,如果到达文件末尾则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。
  • public void close() 输入流

注意,FileStream流顺序读取文件,只要不关闭流,每次调用read方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭

实例代码如下

import java.io.*;
public class Example1 {
	public static void main(String[]args) {
		int n=-1;
		byte[]a=new byte[100];
		try {
			File f=new File("src/Example1","Example1.java");	//设定输入流的源
			InputStream in=new FileInputStream(f);				//创建指向源的输入流
			while((n=in.read(a,0,100))!=-1) {	                //让输入流读取源中的数据
				String s=new String(a,0,n);
				System.out.println(s);
			}
			in.close();
		} catch (IOException e) {
			System.out.println("File read Error"+e);
		}
	}
}
2.2文件字节输出流

使用输出流通常包括4个基本步骤

  • 给出输出流的目的地
  • 创建指目的地的输出流
  • 让输出流把数据写入到目的地
  • 关闭输出流
FileOutputStream的构造方法
  • FileOutputStream(String name)
  • FileOutputStream(File file)
    第一种构造方法使用给定的文件名name创建FileOutputStream流,第二个构造方法使用File对象创建FileOutputStream流。参数name和file指定的文件称为输出流的目的地。
    注意:使用上述的构造方法,如果输出流指向的文件不存在,Java就会创建新文件,如果指向的文件是已经存在的文件,输出流将刷新该文件
  • FileOutputStream(String name,boolean append)
  • FileOutputStream(File file,boolean append)
    注意:参数append取值为true时,输入流不会刷新所指向的文件(假如文件已经存在),输出流的write方法将从文件的末尾开始向文件写入数据。参数append取值为false时,输出流将刷新所指向文件(假如文件已存在)
FileOutputStream的常用方法
  • void write(int n) 输出流向目的地写入单个字节。
  • void write(byte[]b) 输出流向目的地写入一个字节数组
  • void write(byte[] b,int off,int len)从目的地off位置写入len个字节到目的地
  • void flush()将缓存区的内容写入到目的地
  • void close()关闭输出流

示例代码如下

import java.io.*;
public class Example10_5 {
	public static void main(String args[]) {
		byte[]a="HelloWorld".getBytes();//将字符串转换为字节
		byte[]b="ByeByeWorld".getBytes();
		File file=new File("distinction.txt");
		try {
			OutputStream out=new FileOutputStream(file);//创建目的地的输出流
			System.out.println(file.getName()+"的大小:"+file.length()+"字节");
			out.write(a);								//写入数据
			out.close();								//关闭输出流
			out=new FileOutputStream(file,true);
			System.out.println(file.getName()+"的大小:"+file.length()+"字节");
			out.write(b,0,b.length);
			System.out.println(file.getName()+"的大小:"+file.length()+"字节");
			out.close();
		} catch (IOException e) {
			System.out.println("Error"+e);
		}
	}
}

3.字符流

字符流分为文件字符输入流、输出流。FileReader和FileWriter分别是Reader和Writer的子类。字符输入、出流的read和write方法使用字符数组读写数据,即以字符为基本单位处理数据。

FileReader的构造方法

  • FileReader(String filename)
  • FileReader(File file)
  • FileWriter(String filename)
  • FileWriter(File file)
  • FileWriter(String filename,boolean append)
  • FileWriter(File filename,boolean append)
import java.io.*;
public class Example3 {
	public static void main(String args[]) {
		File sourceFile=new File("source.txt");
		File targetFile=new File("target.txt");
		char c[]=new char[19];
		try {
			Writer out=new FileWriter(targetFile,true);
			Reader in=new FileReader(sourceFile);
			int n=-1;
			while((n=in.read(c))!=-1) {
				out.write(c,0,n);
			}
			out.flush();
			out.close();
			
		} catch (IOException e) {
			System.out.println(e);
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值