Java中File的使用方法

一、文件基础知识

文件是一种常见的数据源,文件操作包括存储、读取、删除等。

1.绝对路径和相对路径

绝对路径为完整路径:"C:\windows\system\file.txt"

相对路径为当前路径下的子路径:"\workspace\test\Hello.java"

注意大小写保持一致。

2.文件名称

“文件名.后缀名”,后缀名表示文件类型。

值得注意:后缀名只是标示,和实际存储的文件没有必然联系。

二、File类

File的对象可以代表一个具体的文件或者一个文件夹。

1.File对象代表文件路径

//创建一个File类实例
import java.io.File;
public class FileDemo{
    public static void main(String [] args){
        //原始方法
        File f = new File(String pathname);
        //绝对路径(java中\作为转义符号,所以\\代表路径中\)
        File f1 = new File("d:\\test\\1.txt'');
        //相对路径
        File f2 = new File("1.txt");
        //组合路径(父路径,子路径)
        File f3 = new File("d:\\test\\","1.txt");
        }
}

2.File类常用方法

  • public boolean creatNewFile():创建制定的文件,不能创建文件夹,并且路径必须存在
  • public boolean delete():删除当前文件或者文件夹,文件夹必须为空,非空需先删除全部文件
  • public boolean exists():判断当前文件或文件夹是否存在。
  • public String getAbsolutePath():获得当前文件或文件夹的绝对路径
  • public String getName():获得当前文件或文件夹名称。例如c:\test\1.txt,返回1.txt。
  • public String getParent():获得当前路径父路径。例如c:\test\1.txt,返回c:\test。
  • public boolean isDirectory():判断当前对象是否为目录(文件夹)。
  • public boolean isFile():判断当前对象是否为文件。
  • public long length():获得文件实际大小,注意返回值为long类型
  • public String[] list():获得当前文件夹下所有文件名和文件夹名称的String类数组该名称不是绝对路径
  • public File[] listFiles():获得当前文件夹下所有文件和文件夹的File对象数组
  • public boolean mkdirs():创建文件夹,即使父目录不存在也会自动创建。
  • public boolean renameTo(File dest):修改文件名,如果当前路径下存在要修改为的文件名,则修改失败
  • public boolean setReadOnly():设置当前文件或文件夹为只读。

3.举一个栗子

两个方法,第一个递归输出目录下所有文件名,第二个递归删除一个路径下所有文件。

import java.io.File;
/**
*File Class Demo
*/
public class FileDemo{
    public static void main(String [] args){
        File f = new File("D:\\test");
        printAllFile(f);
        deleteAllFile(f);
    }
    /**
    *Print all files and folders
    */
    public static void printAllFile(File f){
        System.out.println(f.getName());
        if(f.isDirectory()){
            File [] f1 = f.listFiles();
            int len = f1.length;
            for(int i = 0; i < len; i++){
                printAllFile(f1[i]);
            }
        }
    }
    /**
    *Delete all files and folders
    */
    public static void deleteAllFile(File f){
        //f is file, delete it
        if(f.isFile())
            f.delete();
        //f is folder, do recursion
        else{
            File f1[] = f.listFiles();
            int len = f1.length;
            for(int i = 0; i < len; i++){
                deleteAllFile(f1[i]);
            }
        }
        //delete present folder
        f.delete();
    }
}

三、读取文件

将文件内容转为输入流。使用Scanner处理。可以使用InputStream或FileInputStream。

举一个栗子:

import java.io.*
/**
*Using FileInputStream
*/
public class ReadFile1{
    public static void main(String [] args){
        FileInputStream fis = null;
        try{
            fis = new FileInputStream("e:\\a.txt");
            byte[] data = new byte[1024];
            int i = 0;
            int n = fis.read();
            while(n != -1){
                data[i] = (byte)n;
                i++;
                n = fis.read();
            }
            String s = new String(data,0,i);
            System.out.println(s);
        }catch(Exception e){
            e.printStackTrace();
    }finally{
        try{
            fis.close();
        }catch(Exception e){
        }
    }
}

四、写文件

基本输出流包括OutputStream和Writer两个,区别是OutputStream体系中的类是按照字节写入的,而Writer体系中的类是按照字符写入的。

流程:

  • 建立输出流
  • 向流中写入数据
  • 关闭输入流

举个栗子

import java.io.*;
/**
*Using FileOutputStream
*/
public class WriteFile1{
    public static void main(String [] args){
        String s = "Java Language";
        int n = 100;
        FIleOutputStream fos = null;
        try{
            fos = new FileOutputStream("e:\\out.txt");
            byte [] b1 = s.getBytes();
            byte [] b2 = "\r\n".getBytes();
            byte [] b3 = String.valueOf(n).getBytes();
            fos.write(b1);
            fos.write(b2);
            fos.write(b3);
        }catch(Exception e){
            e.pritStackTrace();
    }finally{
        try{
            fos.close();
        }catch(Exception e){}
        }
    }
}

写入txt的内容为:

Java Language

100

以上

私货:

4.22 20:40:留待读完Java的文件操作后整理

4.23 13:10:开始整理~文件这边还是挺好玩的

4.23 13:43: 歇一会来写文件流

4.25 23:00: 一个不小心歇到了这时候……

转载于:https://www.cnblogs.com/solare/p/3681226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值