Java中File类和文件IO流的使用

File类的使用

1.声明方法

import java.io.File;
import java.io.IOException;

public class FileInputStreamBlog {
    public static void main(String[] args){
    	//声明的文件可以是不存在的
        //第一种实例化方法:
        File file = new File("D:\\文件夹1\\b.txt");

        //第二种实例化方法:
        //这里的file2是在file1的路径下创建的
        File file1 = new File("D:\\文件夹1");
        File file2 = new File(file1,"a.txt");
    }
}

注意:当代码要求能跨平台使用时(相对路径用的比较多),路径分隔符就要用File.separator代替,因为不同系统的默认路径分隔符可能不同,如windows的默认分隔符是“\”,而Linux系统则是“/”;所以这个File.separator就是解决这种尴尬的局面,它会根据系统而转变成对应的分隔符。做法如下:

//第一种实例化方法:
File file = new File("D:"+File.separator+"文件夹1"+File.separator+"b.txt");

File类的部分方法使用:

mkdirs和mkdir方法

File file = new File("D:\\文件夹1");
File file1 = new File("D:\\文件夹2\\a.txt");
//两者返回值都是boolean类型
file.mkdir();  //创建单个文件夹
boolean key = file1.mkdirs();  //创建该路径下所有文件夹,注意:最后创建出名为a.txt的文件夹

创建文件 createNewFile

File file3 = new File("D:\\c.txt");
file3.createNewFile();

当路径不存在时会产生IOException,程序无权限操作系统文件时会产生SecurityException 。

isFile()和listFiles()

isFile():判断是否是文件类型
listFiles():返回该file路径下一层中所有的文件和文件夹,结合可查找所需文件:

package com.huilong.Test;
import java.io.File;
import java.io.IOException;
public class FileTest {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\");
        File[] files = file.listFiles();   //返回该file路径下一层中所有的文件和文件夹   
        print(files);

    }

    public static void print(File[] files){
        if (files!=null && files.length!=0){
            for (File file1:files){
                if (file1.isFile()){        //判断是否是一个文件
                    if (file1.getName().endsWith(".txt")){
                        System.out.println("找到一个txt文件:"+file1.getAbsolutePath());
                    }
                }else {
                    File[] files1 = file1.listFiles();
                    print(files1);
                }
            }
        }
    }
}

文件的IO流

字节流

1.输出流FileOutputStream

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\a.txt",true);
        //1.文件不存在则创建
        //2.要抛出FileNotFoundException是因为防止文件因权限不足创建失败
        //3.这里传参传入了一个true,就是开启追加模式;如果不传默认为false,则清空原文件的内容。

        byte[] bytes ="ABCD".getBytes();    //或者{65,66,67,68}
        fos.write(bytes);

        fos.write(bytes,1,3);  //这里还可以传参,重点:第一个数是起始位置,而第二个则是个数。

        fos.write(65);  //传入一个int,则忽略高24位,取低8位,如65:A

        fos.close();   //一定记得要关闭,否则文件会被一直占用
    }
}

2.输入流FileInputStream

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("D:\\a.txt");
        //这里可以选择传入一个File对象

        byte b = (byte) fis.read();    
         //这里没有传参的read方法是将指针下移一位,读到的值以int形式返回,若读到没有值则返回-1
        System.out.println((char) b);

        byte[] bytes = new byte[10];
        String str="";
        while(true){
        	int len =fis.read(bytes);
        	//1.此read方法是返回实际读到的字节的数量,若没有新值读入则返回-1
        	//2.这里传入byte数组的read方法是用读到的新值存在数组里,覆盖旧的值,当最后读到的新值不足以覆盖旧值,那么数组里会存有旧值。               
        	//3.byte数组的大小影响整体的读入速度(下载也是一种读入)
        	if(len==-1){
        	break;
        	}
        	str = new String(bytes,0,len); 
        	System.out.println(str);
        }
        fis.close();
    }
}

字符流

输出流

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {
    public static void main(String[] args) throws IOException {
        FileWriter fileWriter = new FileWriter("c.txt",true);
        //1.传入true为追加模式;不传则默认为false,先清空再添加数据
        //2.文件不存在则创建

        fileWriter.write("语句1");
        //这里的append是write的升级版,append返回this对象,所以一句中可多次调用append
        fileWriter.append("语句2\n").append("语句3");
        fileWriter.close();
    }
}

输入流

1.FileReader

import java.io.FileReader;
import java.io.IOException;

public class FileReaderBlog {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("a.txt");
        //文件不存在或某种原因不能访问时返回FileNotFoundException

        char[] word = new char[10];
        StringBuffer str = new StringBuffer();
        while (true){
            int len = fileReader.read(word);
            if (len==-1){
                break;
            }
            str.append(new String(word,0,len));
        }
        System.out.println(str);
    }
}

2.InputStreamReader
字节流装饰为字符流:使用了装饰者设计模式

import java.io.*;
public class InputStreamBlog {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream("a.txt");
        //转换流:字节流装饰为字符流,使用了装饰者设计模式
        //参数一:要转换的字节流
        //参数二:指定编码名称(不传则使用默认字符集)
        InputStreamReader isr = new InputStreamReader(fileInputStream,"gbk");
        char[] word = new char[10];
        isr.read(word);
        System.out.println(new String(word));
        isr.close();
    }
}

注意:这里的char数组在接收数据,占用内存会根据接收的数据类型改变而改变,如接收了UTF-8占三个字节的汉字,那么数组中存放该汉字的char位就占三个字节。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG非常废

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值