java File一些应用

1.File文件的增删查
1.1文件的创建:
File 变量名= new File("路径");

creatNewFile()  创建新文件,成功返回true,失败返回false

exists()  判断文件是否存在,返回值为布尔类型

//File对文件进行操作
    File file = new File("E:/kj10/file001.txt");
// createNewFile() 创建新文件,返回值为boolean
    try { // 添加try块或者throws声明异常
// exists() 判断文件是否存在
        if (file.exists()) {
            System.out.println("文件已经存在,不能继续创建");
        } else {
            boolean flag = file.createNewFile();
            if (flag) {
                System.out.println("创建文件成功");
            } else {
                System.out.println("创建文件失败");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
1.2文件的查询
isFile() // 判断是文件吗 true

isDirectory() // 判断是文件夹吗 false

getPath() // 获取相对路径 E:\kj10\file001.txt

getAbsolutePath() // 获取绝对路径 E:\kj10\file001.txt

getName() // 获取文件名 file001.txt

length() // 获取文件长度,字节 0

1.3文件的删除
// 删除方法

delete() // 返回值为布尔类型

    public void delFile(File file) {
        if (file.exists()) {
            boolean flag = file.delete();
            if (flag) {
                System.out.println("删除成功");
            } else {
                System.out.println("删除失败");
            }
        } else {
            System.out.println("文件不存在");
        }
    }
2.流
2.1流的分类

按照流向分类:

输入InputStream和Reader作为基类

输出OutputStream和Writer作为基类

按照处理数据单元分类:

字节流:输入:InputStream作为基类

                输出:OutputStream作为基类

字符流:输入:Reader作为基类

                输出:Writer作为基类

3.FileInputStream字节输入流实现数据的读取:
需要导入FileInputStream包,首先实例化对象:FileInputStream fileInputStream = fileInputStream = new FileInputStream("E:\\kj10\\file001.txt");

后面为文件的路径,然后调用FileInputStream的read()方法,当下面有值的时候,返回对应的ASCII码,最后的元素返回-1,添加循环,读出所有元素。

注意添加路径的时候需要抛出或者处理文件未找到异常,并且在最后finally种添加关闭流。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
/**
 * 利用FileInputStream实现数据的读取
 */
public class Demo4_Input {
    public static void main(String[] args) {
        // 1.首先定义一个FileInputStream的空变量(设置为全局变量是为了后续关闭字节输入流)
        FileInputStream fileInputStream = null;
        try {
            // 2.实例化对象,添加文件路径(此时有可能产生异常,需要try-catch语句)
            fileInputStream = new FileInputStream("E:\\kj10\\file001.txt");
            // 3.定义一个变量,接收fis对象调用read()的返回值
            int a = -1;
            // 4.讲read()读取后的返回值(为元素的ASCII码)赋值给a,然后比较是否为-1,-1为文件读取结束的标识,并且此时会添加IOException
            while ((a = fileInputStream.read()) != -1) {
                // 5.将a代表的ASCII码转换成char类型,并输出
                System.out.print((char) a);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 6.在finally语句中添加关闭流的语句,此时需添加try-catch
            try {
                fileInputStream.close();
            } catch (IOException e) {
 
            }
 
        }
    }
}
4.FileInputStream字节输入流和FileOutputStream字节输出流实现复制
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
/**
 * 利用FileInputStream实现数据的读取
 */
public class Demo4_Input {
    public static void main(String[] args) {
        // 1.首先定义一个FileInputStream的空变量(设置为全局变量是为了后续关闭字节输入流)
        FileInputStream fileInputStream = null;
        try {
            // 2.实例化对象,添加文件路径(此时有可能产生异常,需要try-catch语句)
            fileInputStream = new FileInputStream("E:\\kj10\\file001.txt");
            // 3.定义一个变量,接收fis对象调用read()的返回值
            int a = -1;
            // 4.讲read()读取后的返回值(为元素的ASCII码)赋值给a,然后比较是否为-1,-1为文件读取结束的标识,并且此时会添加IOException
            while ((a = fileInputStream.read()) != -1) {
                // 5.将a代表的ASCII码转换成char类型,并输出
                System.out.print((char) a);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 6.在finally语句中添加关闭流的语句,此时需添加try-catch
            try {
                fileInputStream.close();
            } catch (IOException e) {
 
            }
 
        }
    }
}
5.FileReader字符流实现读取
字节流是一个字节一个字节的读取,字符流是一个字符一个字符的读取(中文是两个字节)

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
 
public class Demo4_Readerzijie2 {
    public static void main(String[] args) {
        // 1.定义Reader类型的reader变量
        Reader reader = null;
        try {
            // 2.实例化FileReader对象,获取对应路径下的文件
            reader = new FileReader("E:\\kj10\\demo1.txt");
 
            // 3.循环遍历并输出(无数组形式)
            int a = 0;
            while ((a = reader.read()) != -1) {
                System.out.print((char) a);
            }
            System.out.println();
 
            // 3.循环遍历并输出(数组形式)
            int b = 0; // 接收返回值的变量b
            char[] c = new char[1024]; // 接收字符的数组
            while ((b = reader.read(c)) != -1) {
                for (int i = 0; i < b; i++) {
                    System.out.print(c[i]);
                }
            }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4.关闭reader流对象
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
关于字符流中文乱码的问题:
将txt文档用记事本打开,把UTF-8的格式另存为ANSI并替换原文件,然后打开java工程或文件将文件的格式设置为GBK(不同环境的默认可能不同)

关于字节流中文输出乱码的问题:
将txt文档用记事本打开,把UTF-8的格式另存为ANSI并替换原文件,然后打开java工程或文件将文件的格式设置为GBK(不同环境的默认可能不同)

定义一个InputStreamReader类型的空变量isr,然后正常创建实例化字节流FileInputStream类型的fis对象,然后再实例化isr对象的时候引用fis对象并且改变为GBK格式

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Demo4_Readerzijie {
    public static void main(String[] args) {
        // 1.定义InputStreamReader类型的fr变量
        InputStreamReader isr = null;
        try {
            // 2.实例化InputStreamReader对象,获取对应路径下的文件
            // 字节流的转中文
            FileInputStream fis = new FileInputStream("E:\\kj10\\demo1.txt");
            isr = new InputStreamReader(fis, "GBK");
            // 3.定义临时变量a,判断并读取
            int a = -1;
            while ((a = isr.read()) != -1) {
                System.out.print((char) a);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4.关闭reader流对象
            try {
                isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
6.FileReader字符流和StringBuffer缓存区实现读取
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
 
public class Demo4_Readerzijie2 {
    public static void main(String[] args) {
        // 1.定义Reader类型的reader变量
        Reader reader = null;
        try {
            // 2.实例化FileReader对象,获取对应路径下的文件
            reader = new FileReader("E:\\kj10\\demo1.txt");
 
 
 
            // 3.循环遍历并输出
            int b = 0; // 接收返回值的变量b
            char[] c = new char[1024]; // 接收字符的数组
            StringBuffer s = new StringBuffer(); // 接收字符数组的StringBuffer字符串
            while ((b = reader.read(c)) != -1) {
                s.append(c);// 添加元素
                System.out.println(s.subSequence(0, b));// 输出的时候将后续的空格去掉
            }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4.关闭reader流对象
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
7.FileReader字符流加缓冲流BufferedReader实现读取
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
 
// 字符流读取+缓冲流(提高读取效率)
public class Demo1_BufferRead {
    public static void main(String[] args) {
        // 1.定义Reader字符读取流对象的变量
        Reader fr = null;
        // 2.定义BufferedReader字符缓冲流读取对象的变量
        BufferedReader br = null;
        try {
            // 3.实例化字符读取对象
            fr = new FileReader("E:\\kj10\\Demo1.txt");
            // 4. 实例化BufferedReader字符缓冲读取流
            br = new BufferedReader(fr);
            // 5.定义字符串变量date
            String date = null;
            // 6.循环读取
//            System.out.println(br.readLine());
            while ((date = br.readLine()) != null) {
                System.out.println(date);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
                if (fr != null)
                    fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
8.字符流FileWriter实现写出
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
 
/**
 * 字符流输出
 *
 */
public class Demo2_FileWriter {
    public static void main(String[] args) {
        // 1.定义一个Writer类型的fw变量
        Writer fw = null;
        try {
            // 2.实例化FileWriter对象
            fw = new FileWriter("E:\\kj10\\demo2.txt");
            // 3.定义字符串变量,值为刘亦菲
            String str = "刘亦菲";
            // 4.调用fw对象的write()方法,将字符串输出到文本中
            fw.write(str);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 5.close掉流对象(必须关闭,否则无法输出)
            try {
                fw.flush(); // 强制刷新,作用同close,但是一般还会加上close
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
9.字符流FileWriter加BufferedWriter实现写出
相当于在原有的FileWriter输出的管上添加更粗的管道BufferedWriter
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
 
/**
 * 字符流输出+字符缓冲流(提高输出效率)
 *
 */
public class Demo3_FileWriter_BufferWriter {
    public static void main(String[] args) {
        // 1.定义一个Writer类型的fw变量
        Writer fw = null;
        // 2.定义一个字符缓冲输出流变量
        BufferedWriter bf = null;
        try {
            // 3.实例化FileWriter对象
            fw = new FileWriter("E:\\kj10\\demo2.txt");
            // 4.实例化BufferedWriter字符缓冲输出流,传入fw对象作为参数
            bf = new BufferedWriter(fw);
            // 5.定义字符串变量,值为杨紫
            String str = "杨紫";
            // 4.调用bf对象的write()方法,将字符串输出到文本中
            bf.write(str);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 5.close掉流对象(必须关闭,否则无法输出)
            try {
                bf.close(); // 关闭的时候注意顺序,顺序错了无法输出
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
10.字符流实现复制
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
/**
 * 字符流实现复制功能
 *
 */
public class Demo4_copy {
    public static void main(String[] args) {
        // 1.定义FileReader字符流读取对象
        FileReader fr = null;
        // 2.定义BufferedReader缓冲字符流读取对象
        BufferedReader br = null;
        // 3.定义FileWriter字符流写出对象
        FileWriter fw = null;
        // 4.定义BufferedWriter缓冲字符流写出对象
        BufferedWriter bw = null;
        try {
            // 5.全部实例化,将fr,fw作为参数实例化br,bw
            fr = new FileReader("E:\\kj10\\demo1.txt");
            br = new BufferedReader(fr);
            fw = new FileWriter("E:\\kj10\\demo3.txt");
            bw = new BufferedWriter(fw);
            // 6.定义字符串str变量
            String str = null;
            // 7.循环遍历读取流中的数据,返回值给str赋值,直接读取接收,返回值为null
            while ((str = br.readLine()) != null) {
                // 8.通过流的方式写出在字符串中
                bw.write(str + "\r\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 9.关闭流(注意顺序)
            try {
                if (bw != null) {
                    bw.close();
                }
                if (fw != null) {
                    fw.close();
                }
                if (br != null)
                    br.close();
                if (fr != null)
                    fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
    }
}
11.复制二进制文件(图片视频)
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
/**
 * 利用DateInputStream实现图片或者视频的复制
 *
 */
public class Demo5_copypicture {
    public static void main(String[] args) {
        FileInputStream fis = null;
        DataInputStream dis = null;
        FileOutputStream fos = null;
        DataOutputStream dos = null;
        try {
            fis = new FileInputStream("E:\\kj10\\nn.jpg");
            dis = new DataInputStream(fis);
            fos = new FileOutputStream("E:\\kj10\\nn1.jpg");
            dos = new DataOutputStream(fos);
 
            // 第一种方式
            int data = -1;
            while ((data = dis.read()) != -1) {
                dos.write(data);
            }
 
            // 第二种方式
            int date = -1;
            byte[] b = new byte[1024];
            while ((date = dis.read(b)) != -1) {
                dos.write(b, 0, date);
            }
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                dos.close();
                fos.close();
                dis.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值