文件

it2022-07-02  209

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

  输出结果:

  

  需要注意的是,一开始文件目录“src\a”不存在,所以调用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


最新回复(0)