1、File类操作文件或目录属性
(1)在Java程序中通过使用java.io包提供的一些接口和类,对计算机中的文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作;
(2)File对象既可以表示文件,也可以表示目录,在程序中一个File对象可以代表一个文件或目录;
(3)利用File类可以来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称、最后修改日期、文件大小等;
(4)File类的常用构造方法如下所示:
1)File (String pathname):用指定的文件路径构造文件;
2)File(String dir,String subpath):在指定的目录下创建指定文件名的文件,dir参数指定目录路径,subpath参数指定文件名;
3)File(File parent,String subpath):根据一个文件对象和一个字文件构造文件对象,parent参数指定目录文件,subpath参数指定文件名。
(5)File类的常用方法如下所示:
1)boolean exists():测试文件是否存在;
2)String getAbsolutePath():返回此对象表示的文件的绝对路径;
3)String getName():返回此对象表示的文件的名称;
4)String getParent():返回此File对象的路径的上一级,如果路径名没有上一级,则返回null;
5)boolean delete():删除此对象指定的文件;
6)boolean createNewFile():创建空文件,不创建文件夹;
7)boolean isDirectory():测试此File对象表示的是否是目录;
8)boolean mkdir():创建一个目录,它的路径名由当前File由当前File对象指定;
9)boolean mkdirs():创建包括父目录的目录
关于使用File类的相关代码:
import java.io.File;
public class FileTest {
public static void main(String[] args) {
File file1 = new File("F:\\a.txt");
File file2 = new File("F:/demo");
// boolean exists()测试此抽象路径名表示的文件或目录是否存在。如果存在返回true,如果不存在返回false
boolean result1 =file1.exists();
System.out.println("file1对象指向的文件存在:"+result1);
System.out.println("file2对象指向的目录存在:"+file2.exists());
// boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
// boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件。
System.out.println("file1对象指向的是一个文件:"+file1.isFile());//true
System.out.println("file1对象指向的是一个目录:"+file1.isDirectory());//false
System.out.println("file2对象指向的是一个文件:"+file2.isFile());//false
System.out.println("file2对象指向的是一个目录:"+file2.isDirectory());//true
// String getName() 返回由此抽象路径名表示的文件或目录的名称。
System.out.println("file1对象指向的文件名称:"+file1.getName());//a.txt
System.out.println("file2对象指向的目录名称:"+file2.getName());//demo
// boolean delete()删除此抽象路径名表示的文件或目录。删除成功返回true,删除失败,返回false
System.out.println("file1对象指向的文件删除成功:"+file1.delete());
System.out.println("file2对象指向的目录删除成功:"+file2.delete());
}
2、认识Java的流
(1)读文件是指把文件中的数据读取到内存中;
(2)写文件是把内存中的数据写到文件中;
(3)Java程序通过流来读写文件;
(4)流是指一连串流程的字符,是以先进先出的方式发送和接收数据的通道;
(5)流分为输入流和输出流,输入/输出流是相对于计算机内存来说的,如果数据输入到内存,则为输入流,如果从内存中输出则为输出流;
(6)Java的输出流主要有OutputStream类和Writer类作为基类,输入流主要由InputStream类和Reader类作为基类;
(7)在java.io包中,封装了许多输入/输出流的API,在程序中,这些输入/输出流类的对象称为流对象;
(8)可以通过流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存;
(9)构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源。输入流关联的是源数据源;输出流关联的是目标数据源;
(10)输入/输出流又分为字节流和字符流两种形式:
1)字节流是8位通用字节流,其基本单位是字节。字节流的基类是InputStream类和OutputStream类,它们是抽象类。
2)字符流是16位Unicode字符流,基本单位是Unicode字符。字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。字符流的基类是Reader类和Writer类,它们是抽象类。
(11)一个被访问的流基本特征都是通过实现InputStream类、OutputStream类、Reader类和Writer类这4个抽象类的方法建立的。
(12)InputStream类常用方法如下:
1)int read():从输入流中读取下一个字节数据;
2)int read(byte[ ] b):从输入流中读取数据,并将数据存储在缓冲区数组b中,返回实际读取的字节数;
3)int read(byte[] b,int off,int len):从输入流中读取最多len长度的字节,保存到字节数组中,保存的位置从off开始;
4)void close():关闭输入流。
InputStream类的常用子类有FileInputStream,用于从文件中读取数据。
(13)OutputStream类常用方法如下:
1)void write():将指定的字节数据写入此输入流中;
2)void write(byte[ ] buf):将数组buf中的所有字节写入此输出流中;
3)void write(byte[ ] b,int off,int len):将字节数组中从偏移量off开始的长度为len的字节数据输出到输出流中;
4)void close():关闭输出流;
OutputStream类的常用子类有FileOutputStream,用于向文件写数据。
(14)Reader类常用方法如下:
1)int read(byte[ ] c):从输入流中最多读取c.length个字符,保存到字符数组c中,返回实际读取的字符数;
2)int read(char[ ] c,int off,int len):从输入流中读取最多len个字符,保存到字符数组c中,保存的位置从off开始,返回实际读取的字符数;
3)void close():关闭流。
Reader类的常用子类有BufferedReader,接受Reader对象作为参数,并对其添加字符缓冲器。
(15)Writer类常用方法如下:
1)void write(String str):将str字符串里包含的字符输出到指定的输出流中
2)void write(String str,int off,int len):将str字符串里从off位置开始,长度为len的多个字符输出到输出流中;
3)void close():关闭输出流;
4)void flush():刷新输出流。
Writer类的常用子类有BufferedWrite,用于将数据缓冲到字符输出流。
(16)在操作上字节流和字符流还有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区;
(17)流中的方法在出现错误时都会抛出IOException异常。
关于InputStream的相关代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) throws IOException {
//创建一个File类对象
File file = new File("F:/test.txt");
//创建FileInputStream类对象
FileInputStream fileInputStream = new FileInputStream(file);
//通过fileInputStream对象调用方法从file对象指向的文件中读取数据
// int read(byte[] b)从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
//创建一个byte类型的数据
byte[] bytes = new byte[1024];
int num =fileInputStream.read(bytes);
System.out.println("从流中读取的字节数:"+num);
//遍历bytes数组,输出数组中存储的数据
for (int i =0;i<num;i++){
System.out.print((char)bytes[i]);
}
fileInputStream.close();
}
}
关于OutputStream的相关代码:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("F:/test.txt",true);
//通过fileOutputStream对象调用方法向F:/test.txt文件中写入数据
//将数据字符串“asdfghjkl”写入文件中
String str = "asdfghjkl";
//将字符串转换为byte类型的数组
byte[] bytes =str.getBytes();
fileOutputStream.write(bytes);
System.out.println("数据写入完毕");
//关闭流
fileOutputStream.close();
}
}