文件

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 }
fileMethod
 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 }
testFile

  输出结果:

  

  需要注意的是,一开始文件目录“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 }
testRandomAccessFile

  输出结果:

  

原文地址:https://www.cnblogs.com/lqkStudy/p/11182767.html