1. File类
2 . IO流的基本原理
3. IO流的分类
4. 文件字节流与文件字符流
一:File类
java.io.File类代表系统文件(文件和目录)。
访问文件属性步骤
1 创建文件对象:File file = new File( String pathname );
"c:\\test .txt"或"c:/test .txt"
2 调用方法:操作文件或目录的属性(路径、权限、日期和时间等 )
File类的属性:separator 默认名称分隔符在 UNIX 系统上,此字段的值为 '/';在 Windows 系统上,它为 '\\'
为了程序的跨平台特性,文件的路径应该用这个属性值来代表。
File类的常用方法:
方法名称 | 说 明 |
boolean exists( ) | 判断文件或目录是否存在 |
boolean isFile( ) | 判断是否是文件 |
boolean isDirectory( ) | 判断是否是目录 |
String getName( ) | 返回此对象表示的文件或目录的名称 |
String getPath( ) | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath( ) | 返回此对象表示的文件的绝对路径名 |
boolean delete( ) | 删除此对象指定的文件或目录 |
boolean createNewFile( ) | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节, 如果文件不存在,则返回 0L |
boolean mkdir() | 创建此抽象路径名指定的目录 |
boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 |
String[] list() | 返回此目录中的文件名和目录名的数组 |
File[] listFiles() | 返回此目录中的文件和目录的File实例数组 |
package file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
File f=new File("d:"+File.separator+"text.txt");
if(f.exists()){//判断文件目录是否存在
f.delete();
System.out.println("文件已删除");
}else{
try {
f.createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
eg2:
package file;
import java.io.File;
public class DirDemo {
public static void main(String[] args) {
File f=new File("c:"+File.separator+"text1"+File.separator+"text2"+File.separator+"text3");
//boolean flag=f.mkdir();
//System.out.println(flag?"目录创建成功":"创建失败");
boolean flag1=f.mkdirs(); //如果目录已经存在,则创建失败
System.out.println(flag1?"目录创建成功":"创建失败");
System.out.println(f.getPath());//获取路径
System.out.println(f.getParentFile());//获取父目录
}
}
eg3:
package file;
import java.io.File;
public class ListFilesDemo {
public static void main(String[] args) {
File f=new File("d:"+File.separator);
File[] files=f.listFiles();//返回正在遍历的目录的文件
System.out.println(files.length);
for(File file:files){
System.out.println(file);
}
}
}
递归遍历文件夹
eg4:
package file;
import java.io.File;
public class ShowAllFile {
public static void main(String[] args) {
File f=new File("d:"+File.separator);
showAllFiles(f);
}
public static void showAllFiles(File f){
if(f!=null){
if(f.isDirectory()){ // 是否为目录
File[] files=f.listFiles(); // 返回当前正在遍历的目录中的文件和目录的File实例数组
if(files!=null){
for(File file:files){
showAllFiles(file);
}
}
}else{
System.out.println(f.getPath());
}
}
}
}
二:IO流的基本原理
数据流(Stream)是指数据通信的通道。
java程序中对数据的输入、输出操作是以“流”方式进行的。JDK中提供了各式的“流”类来获取不同种类的数据。
三: IO流的分类
按流向分:
输入流:程序从数据源读取数据的流
输出流:程序向数据源写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。
JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。
字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
OutputStream: write(xx) 写入字节系列方法
Reader: read(xx)读取字符系列方法
Writer:write(xx)写入字符系列方法
文件字节流: FileInputStream和FileOutputStream
文件字符流: 用FileReader和FileWriter
2.FileInputStream类
构造方法
FileInputStream(File file)
FileInputStream(String name)
eg:
package stream;
import java.io.*;
public class CopyImage {
public static void main(String[] args) {
File srcFile=new File("d:"+File.separator+"image"+File.separator+"1014.jpg");
File destFile1=new File("d:"+File.separator+srcFile.getName());
copy(srcFile,destFile1);
}
public static void copy(File src, File dest) {
InputStream input=null;
OutputStream out=null;
try{
input=new FileInputStream(src);//读取源文件的流
out=new FileOutputStream(dest);//写入目标文件的流
byte[] b=new byte[1024];//自定义缓冲区
int len=0;
while((len=input.read(b))!=-1){
out.write(b,0,len);
}
System.out.println("复制完毕");
}catch(Exception e){
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
eg2:
package stream;
import java.io.*;
public class FileInputStreamDemo {
private static byte data;
public static void main(String[] args) {
File f=new File("c:"+File.separator+"text.txt");
InputStream input=null;
try {
input=new FileInputStream(f);
/*
* 每次读取一个字节数据
* int date=0;
* while((date=input.read())!=-1{
* byte b=(byte)data;
* byte[] array=new byte[1];
* array[0]=b;
* String str=new String(array);
* System.out.print(str);
* }**/
byte[] b=new byte[1024];//自定义缓冲区
int len=input.read(b);//读取到byte[]数组中,返回读入到byte【】数组中的字节数
System.out.println("读取的内容是"+new String(b,0,len));//len 最多装len长度的字节
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
input.close();//关闭流,流很费资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.FileOutputStream类:
构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容
2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件
eg:
package stream;
import java.io.*;
public class FileOutputStreamDemo {
public static void main(String[] args) {
File f=new File("c:"+File.separator+"text1.txt");
OutputStream out=null;
try {
out=new FileOutputStream(f,true);//true开启追加模式,不停重复写入XX
out.write("XX".getBytes());//直接写入一个字节数
String data="大唐盛世";
byte[] b=data.getBytes();
out.write(b,0,2);//写入2个字节,使用三参的write(XXX)方法写入
out.write(data.getBytes());
System.out.println(f.length());
System.out.println("写入成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.FileReader类
构造方法
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新FileReader
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
eg:
package stream;
/*
* java.io.Reader是所有字符输入流的父亲,该类定义了以字符为单位读取数据的基本方法,倘若输入流当前没有数据,则返回-1,出现错误则抛出IOException
*/
import java.io.*;
public class FileReaderStreamDemo {
public static void main(String[] args) {
Reader r=null;
try {
r=new FileReader("c:"+File.separator+"test.txt");
int data=r.read();//读取一个字符
char c=(char)data;//转换成字符
System.out.println("第一次读取"+c);
char[] a=new char[1024];
int len =r.read(a);// 读取数据放入缓冲区中,返回存入缓冲区中的字符个数
System.out.println("第二次读取"+new String(a,0,len));
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
5.FileWriter类
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对
FileWriter(File file, boolean append)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
eg:
package stream;
import java.io.*;
public class FileWriterDemo {
public static void main(String[] args) {
Writer w=null;
try {
w=new FileWriter("c:"+File.separator+"test.txt");
w.write("你好,Java".toCharArray()); // 写入字符数组
w.write("XXXXX"); // 写入字符串
w.write('a'); // 写入单个字符
w.flush(); // 将缓冲区中的写入内容,刷到磁盘上
System.out.println("写入成功!");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}