JAVA-IO之File类

在整个IO包了,唯一表示与文件本身有关的类就是File类。使用File类可以进行1创建或删除文件等常用操作。要想使用File类。则首先要观察File类的构造方法,此类的常用构造方法如下所示:

public File(String pathname)  实例化File类的时候,必须设置好路径

No.

方法或常量

类型

描述

1

public static final String pathSeparator

常量

表示路径的分隔符(windows是“;”)

2

public static final String separator

常量

表示路径的分隔符(windows是“\”)

3

public File(String pathname)

构造

创建File类对象,传入完整路径

4

public boolean createNewFile()throws IOException

普通

创建新文件

5

public boolean delete()

普通

删除文件

6

public boolean exists()

普通

判断文件是否存在

7

public boolean isDirectory()

普通

判断给定的路径是否在一个目录

8

public long length()

普通

返回文件的大小

9

public String[] list()

普通

列出指定目录的全部内容,只是名称

10

public File[] listFiles()

普通

列出指定目录的全部内容,会有路径

11

Public Boolean mkdir()

普通

创建一个目录

12

Public Boolean renameTo(File dest)

普通

为已有的文件重命名

 

实例操作一:创建一个新文件

在D盘创建一个test.txt文件

复制代码
 1 import java.io.File;
2 import java.io.IOException;
3
4 public class Test1 {
5 public static void main(String[] args) {
6 File f=new File("d:"+File.separator+"test.txt");//为增加可移植性,建议使用File.separator
7 try {
8 f.createNewFile();
9 } catch (IOException e) {
10 e.printStackTrace();
11 }
12 }
13 }
复制代码


实例操作二:删除一个指定文件

删除刚刚创建的test.txt文件

复制代码
 1 import java.io.File;
2
3 public class Test2 {
4 public static void main(String[] args) {
5 File f=new File("d:"+File.separator+"test.txt");
6 if(f.exists()){//判断文件存不存在,如不存在就不用删除了
7 f.delete();
8 }
9 }
10 }
复制代码

 

实例操作三:综合创建,删除文件的操作

给定一个路径,如果此文件存在,则删除,如果不存在,则创建

复制代码
 1 import java.io.File;
2 import java.io.IOException;
3
4 public class Test3 {
5 public static void main(String[] args) {
6 File f=new File("d:"+File.separator+"test.txt");
7 if(f.exists()){
8 f.delete();
9 }else{
10 try {
11 f.createNewFile();
12 } catch (IOException e) {
13 e.printStackTrace();
14 }
15 }
16 }
17 }
复制代码

 

实例操作四:创建一个文件夹

使用mkdir()方法创建一个文件夹

复制代码
1 import java.io.File;
2
3 public class Test4 {
4 public static void main(String[] args) {
5 File f=new File("d:"+File.separator+"test");
6 f.mkdir();//创建文件夹
7 }
8 }
复制代码

 

实例操作五:列出指定目录的全部文件

如果现在给出了一个目录,则可以直接列出目录中的内容。但是列出的方法在File类中存在两个:

  • 以字符串数组的形式返回:public String[] list()
  • 以File数组的形式返回:public File[] listFiles()

操作一:使用list()列出全部内容

复制代码
 1 import java.io.File;
2
3 public class Test5 {
4 public static void main(String[] args) {
5 File f=new File("d:"+File.separator);
6 String[] str=f.list();
7 for(String s:str){
8 System.out.println(s);
9 }
10 }
11 }
复制代码

以上列出了全部的名字,包括文件夹得名字和文件的名字。

操作二:使用listFiles()列出

复制代码
 1 import java.io.File;
2
3 public class Test6 {
4 public static void main(String[] args) {
5 File f=new File("d:"+File.separator);
6 File[] files=f.listFiles();
7 for(File file:files){
8 System.out.println(file);
9 }
10 }
11 }
复制代码

以上列出了完全路径。

 

实例操作六:判断一个给定的路径是否目录

给定路径,判断是否是目录

复制代码
 1 import java.io.File;
2
3 public class Test7 {
4 public static void main(String[] args) {
5 File f=new File("d:"+File.separator);
6 if(f.isDirectory()){
7 System.out.println(f.getPath()+"是目录");
8 }else{
9 System.out.println(f.getPath()+"不是目录");
10 }
11 }
12 }
复制代码

 

实例操作七:列出指定目录的全部内容

如果给定了一个目录,则要求把此目录中的全部文件都列出来,包括子文件夹下的文件

复制代码
 1 import java.io.File;
2
3 public class Test8 {
4 public static void main(String[] args) {
5 File f = new File("d:" + File.separator);
6 print(f);
7 }
8 public static void print(File f) {
9 if (f != null) {
10 if (f.isDirectory()) {
11 File[] files = f.listFiles();
12 if (files != null) {
13 for (File file : files) {
14 print(file);
15 }
16 }
17 } else {
18 System.out.println(f);
19 }
20 }
21 }
22 }
复制代码


总结:

  1. File类是在java.io包中唯一与文件本身有关的
  2. 可以使用File类创建、删除等常见的文件操作
  3. 在使用File类指定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割
  4. 之前的File类只是针对文件本身进行操作的,而如果相对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随即读取类,可以随机的读取一个文件中指定位置的数据。

    因为在文件中,所有得内容都是按照字节存放的,都有固定的保存位置。

     

    构造函数:

    public RandomAccessFile(File file,String mode)throws FileNotFoundException

    实例化此类的时候需要传递File类。告诉程序应该操作的是哪个文件,之后有个模式,文件的打开模式,常用的两种模式:

    • r:读
    • w:写
    • rw:读写,如果使用此模式,如果文件不存在,则会自动创建

    先写信息:

    复制代码
     1 import java.io.File;
    2 import java.io.IOException;
    3 import java.io.RandomAccessFile;
    4
    5 public class Test9 {
    6 public static void main(String[] args) throws IOException {
    7 File f = new File("d:" + File.separator+"test.txt");
    8 RandomAccessFile raf=new RandomAccessFile(f,"rw");//读写模式,如果该路径不存在会自动创建
    9 String name1="jim";
    10 int age1 =20;
    11 String name2="Tom";
    12 int age2=30;
    13 raf.writeBytes(name1);
    14 raf.writeInt(age1);
    15 raf.writeBytes(name2);
    16 raf.writeInt(age2);
    17 raf.close();
    18 }
    19 }
    复制代码

    然后读文件:

    复制代码
     1 import java.io.File;
    2 import java.io.IOException;
    3 import java.io.RandomAccessFile;
    4
    5 public class Test10 {
    6 public static void main(String[] args) throws IOException {
    7 File f = new File("d:" + File.separator+"test.txt");
    8 RandomAccessFile raf=new RandomAccessFile(f,"r");//以读模式打开
    9 raf.skipBytes(7);//跳过第一个人的信息
    10 byte[] bs=new byte[3];
    11 for(int i=0;i<bs.length;i++){
    12 bs[i]=raf.readByte();
    13 }
    14 String name2=new String(bs);
    15 int age2=raf.readInt();
    16 System.out.println(name2+" "+age2);
    17
    18 raf.seek(0);//指针回到文件开头,读取第二个人的信息
    19 for(int i=0;i<bs.length;i++){
    20 bs[i]=raf.readByte();
    21 }
    22 String name1=new String(bs);
    23 int age1=raf.readInt();
    24 System.out.println(name1+" "+age1);
    25 }
    26 }
    复制代码



    另外:可能有的同学输入的是中文,那么使用getBytes()转换,会占3个字节(取决你的本地编码,如果用Eclipse可设置成UTF-8),咦?java里面中文不是占两个字节吗?怎么会变成3个字节呢?其实这不是一个概念,java默认字符编码的是unicode,确实占两个字节,但是在String换转byte[]时用的getBytes()默认用的编码进行转换,那么就会占3个字节,unicode和UTF-8不是一个概念,仔细观察的话会发现getBytes()方法有另外的重载getBytes("……"),例如通过getBytes("gbk"),这是转化的中文就会变成两字节了。


你可能感兴趣的:(JAVA-IO之File类)