一、File类
File类是java.io包下与平台无关的文件和目录,即如果希望在程序中操作文件和目录,都可以通过File类来完成。File能新建、删除、重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要输入/输出流。
File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。
一旦创建File对象后,就可以调用File对象的方法来访问,File类提供了很多方法来操作文件和目录。下面列出一些常见方法:
1.String getName() 返回此File对象所表示文件对应的文件名。
2.String getPath() 返回此File对象所对应的路径名。
3.String getAbsolutePath() 返回此File对象的绝对路径名。
4.String getParent() 返回此File对象所对应目录的父目录名。
5.boolean renameTo(File newName) 重命名此File对象所对应的文件或目录,如果重命名成功则返回true,否则返回false。
6.long length() 返回文件内容的长度。
7.boolean delete() 删除File对象所对应的文件或路径。
8.static File createTempFile(String prefix,String suffix,File directory) 再directory所指定的目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定的后缀作为文件名。
9.boolean createNewFile() 当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,如果创建成功返回true,否则返回false。
二、理解Java的IO流
Java的IO流是实现输入/输出的基础,它可以方便地实现数据地输入/输出操作,在Java中把不同地输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源。
输入流:只能从中读取数据,不能向其写入数据。主要由InputStream(字节)和Reader(字符)作为基类。
输出流:只能向其写入数据,不能从中读取数据。主要由OutputStream(字节)和Writer(字符)作为基类。
字符流和字节流的用法几乎一样,区别在于字节流和字符流所操作的数据单元不同。字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。
按照流的角色可以把流分为节点流和处理流:可以从/向一个特定的IO设备(如磁盘、网络)读写数据的流,称为节点流,节点流也被称为低级流;处理流则用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读写功能,处理流也被称为高级流。
处理流的功能主要体现在:性能的提高——主要以增加缓冲的方式来提高输入/输出的效率;操作的边界——处理流可能提供了一系列边界的方法来一次输入/输出大批量的内容。
三、字节流和字符流
字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已。
在InputStream中包含如下三个方法:
1.int read() 从输入流读取单个字节,返回所读取的字节数据。
2.int read(byte[] b) 从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数。
3.int read(byte[] b,int off,int len) 从输入流中最多读取len个字节的数据,并将其存储在字节数组b中,放入b中并不是从数组的起点开始,而是从off位置开始,返回实际读取的字节数。
实际操作一下:
public class FileInputStreamTest {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("D:\\新建文件夹\\src\\FileInputStreamTest.java");
byte[] bbuf=new byte[1024];
int hasRead=0;
while((hasRead=fis.read(bbuf))>0){
//0即从第0位开始读取
System.out.println(new String(bbuf,0,hasRead));
}
fis.close();/*关闭文件输入流*/
}
}
输出结果:
上述代码
当然,Reader中也可以有上面三种方法,不过读取的是字符。
对于代码行FileStream fis=new FileInputStream("完整路径...FileInputStreamTest.java");
注意是完整路径。
与JDBC编程一样,程序里打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应当.close();
手动关闭文件IO资源。
要注意使用read方法时要先创建一个数组,即“竹筒”,再创建一个hasRead来保存实际读取的字符数。
在OutputStream中包含三个方法:
void mark(int readAheadLimit) 在记录指针当前位置记录一个标记。
boolean markSupported() 判断此输入流是否支持mark()操作,即是否支持记录标记。
void reset() 将此流的记录指针重新定位到上一次记录标记的位置。
long skip(long n) 记录指针向前移动n个字节。
Writer可以用字符串来代替字符数组,故还包含两个方法:
void write(String str) 将str字符串里包含的字符输出到指定输出流中。
void write(String str,int off,int len) 将str字符串里从off位置开始,长度为len字符串输出到指定输出流中。
实际操作:
public class FileOutputSteramTest {
public static void main(String[] args){
try(
FileInputStream fis=new FileInputStream("D:\\新建文件夹\\src\\FileOutputSteramTest.java");