File类
java.io.File类用于访问文件与目录的信息。
在传入路径参数时,有两种形式:
1.绝对路径:传入绝对路径可以保证路径绝对不会出错,但是也就将路径写死了。
2.相对路径:相对路径需要注意根路径,在File对象中相对路径是相对于项目根路径,而不是src根路径。
File类常用的构造方法有:
1.File(String pathname):传入文件的路径创建File对象。
2.File(String parent, String child):传入文件所在文件目录的路径以及文件名创建File对象。
3.File(File parent, String child):传入文件所在文件目录的File对象以及文件名创建File对象。
File类常用的方法有:
1.String getName():获取文件的文件名。
2.String getPath():获取文件的路径。如果创建File对象时传入的路径为相对路径,则结果为相对路径;为绝对路径,则结果为绝对路径。
3.String getAbsolutePath():获取文件的绝对路径。
4.String getParent():获取文件所在文件目录的路径。如果创建File对象时传入的路径为相对路径,则结果为相对路径;为绝对路径,则结果为绝对路径。
5.boolean exists():判断File对象是否存在。
6.boolean isFile():判断File对象是否为文件。
7.boolean isDirectory():判断File对象是否为文件目录。
8.boolean canRead():判断File对象是否可读。
9.boolean canWrite():判断File对象是否可写。
10.long length():返回文件的大小,单位为字节。
11.boolean createNewFile() throws IOException:创建文件。
a.File对象存在,返回false。
b.如果File对象所在文件目录不存在,则抛出异常。
12.boolean mkdir():创建文件目录,成功返回true,否则返回false。
a.File对象存在,返回false。
b.File对象是文件,返回false。
c.File对象上一级目录不存在,返回false。
13.boolean mkdirs():创建整个文件目录,成功返回true,否则返回false。
a.File对象存在,返回false。
b.File对象上一级目录不存在,则连同上一级目录一起创建,返回true。
14.boolean delete():删除,成功返回true,否则返回false。
a.File对象不存在,返回false。
b.File对象对应文件目录下还有其他文件或文件目录,返回false。
1 static void fileMethod(File file) { 2 System.out.println("是否存在?" + file.exists()); 3 System.out.println("--" + file + "--"); 4 System.out.println("文件名:" + file.getName()); 5 System.out.println("路径:" + file.getPath()); 6 System.out.println("绝对路径:" + file.getAbsolutePath()); 7 System.out.println("所在目录路径:" + file.getParent()); 8 System.out.println("是否为文件目录?" + file.isDirectory()); 9 System.out.println("是否为文件?" + file.isFile()); 10 System.out.println("是否可读?" + file.canRead()); 11 System.out.println("是否可写?" + file.canWrite()); 12 }
1 @Test 2 void testFile() { 3 File file1 = new File("src\a\b"); 4 System.out.println("是否存在?" + file1.exists()); 5 if (! file1.exists()) { 6 System.out.println("是否创建成功?" + file1.mkdir()); 7 System.out.println("是否创建成功?" + file1.mkdirs()); 8 } 9 fileMethod(file1); 10 System.out.println("-----------------------------------------"); 11 File file2 = new File(file1, "c.txt"); 12 System.out.println("是否存在?" + file2.exists()); 13 if (! file2.exists()) { 14 try { 15 System.out.println("是否创建成功?" + file2.createNewFile()); 16 } catch (IOException e) { 17 e.printStackTrace(); 18 } 19 } 20 fileMethod(file2); 21 }
输出结果:
需要注意的是,一开始文件目录“srca”不存在,所以调用mkdir()方法会返回false,只能调用mkdirs()方法创建。
RandomAccessFile类
File类主要用于获取文件的信息,而java.io.RandomAccessFile类主要用于读写文件。RandomAccessFile类可以从任何位置进行读写,相对于文件IO流更具有灵活性。
RandomAccessFile类常用的构造方法有:
1.RandomAccessFile(String name, String mode) throws FileNotFoundException:传入文件路径和模式创建RandomAccessFile对象。
2.RandomAccessFile(File file, String mode) throws FileNotFoundException:传入文件的File对象和模式创建RandomAccessFile对象。
RandomAccessFile类常用的模式有两种:
1.只读模式(“r”):文件只能读,不能写。
2.读写模式(“rw”):文件可以读和写。
创建RandomAccessFile对象时需要注意,如果文件本身不存在,会出现两种情况:
1.如果模式为只读模式,则会抛出FileNotFoundException异常。
2.如果模式为读写模式,则会自动创建对应文件。
RandomAccessFile类支持文件指针(File Pointer),文件指针用于指示当前读写的位置。创建RandomAccessFile对象时,文件指针指向开始位置。当文件指针指向的位置大于等于文件大小时,表示已经到达末尾。
RandomAccessFile类常用的方法
获取信息
1.long length() throws IOException:获取文件的大小,单位为字节。
2.long getFilePointer() throws IOException:获取文件指针指向的位置。
读写
文件读写需要注意文件指针指向的位置。向文件写入内容时会覆盖原有的内容。
1.int read() throws IOException:从文件指针指向的位置开始,读取一个字节并返回。如果文件指针指向末尾,则返回-1。
2.int read(byte b[]) throws IOException:从文件指针指向的位置开始,读取字节数组长度个字节并返回读取的字节数。如果文件指针指向末尾,则返回-1。
3.int read(byte b[], int off, int len) throws IOException:从文件指针指向的位置开始,读取len个字节,并从b[off]位置开始保存到字节数组中。
4.String readLine() throws IOException:从文件指针指向的位置开始,读取一行内容。如果文件指针指向末尾,则返回null。
5.void write(int b) throws IOException:将一个字节写入文件指针指向的位置。
6.void write(byte b[]) throws IOException:将一个字节数组的内容写入文件指针指向的位置。
7.void write(byte b[], int off, int len) throws IOException:将一个字节数组从b[off]位置开始的len个字节写入文件指针指向的位置。
除了以上方法还有readXxx()和writeXxx()方法用于读写一个基本类型的数据。
文件指针操作
1.void seek(long pos) throws IOException:指定文件指针指向的位置。
2.int skipBytes(int n) throws IOException:从文件指针指向的位置开始,移动指定的字节数,并返回成功移动的字节数。
两个方法的区别:
1.seek()方法是指定具体的位置,可以在文件的任意位置。
2.skipBytes()方法是指定移动的字节数,文件指针只会向后移动,如果移动的字节数过大,则文件指针只会移动到末尾。
文件操作
1.void setLength(long newLength) throws IOException:设置文件大小。
a.设置值大于原先的文件大小,则将文件扩大。
b.设置值小于原先的文件大小,则将文件缩小,并删除后面的内容。
2.void close() throws IOException:关闭文件。
示例
1 @Test 2 void testRandomAccessFile() { 3 try { 4 File f = new File("src\test.txt"); 5 System.out.println("是否存在?" + f.exists()); 6 RandomAccessFile file = new RandomAccessFile(f, "rw"); 7 System.out.println("是否存在?" + f.exists()); 8 System.out.println("文件指针当前的位置:" + file.getFilePointer()); 9 file.write("Hello World".getBytes()); 10 System.out.println("文件指针当前的位置:" + file.getFilePointer()); 11 file.seek(0); 12 System.out.println("文件指针当前的位置:" + file.getFilePointer()); 13 byte[] b = new byte[5]; 14 file.read(b); 15 System.out.println(new String(b)); 16 System.out.println("文件指针当前的位置:" + file.getFilePointer()); 17 file.skipBytes(1); // 跳过空格 18 System.out.println("文件指针当前的位置:" + file.getFilePointer()); 19 file.read(b); 20 System.out.println(new String(b)); 21 file.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 }
输出结果: