第十三周java学习总结

本周人就学习文件的相关的读写操作
三、文件读写操作
(一)通过字节流来读写文件
1、创建FileReadWrite01类

package net.wek13文件读写;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 功能:利用字节流完成文件读写操作
 * 作者:谯婷
 * 日期:2019.5.21
 */
public class FileReadWrite01 {
    public static void main(String[] args) {
        //创建一个文本文件
        File file = new File("love.txt");
        try {
            //创建文件
            file.createNewFile();
            System.out.println("文件[" + file.getAbsolutePath() + "]创建成功!");
            //创建文件字节输出流
            FileOutputStream fos = new FileOutputStream(file);//程序输出字节流,写入文件中
            //往文件里写入若干字节数据(一次一个字节)
            fos.write('I');
            fos.write(' ');
            fos.write('l');
            fos.write('o');
            fos.write('v');
            fos.write('e');
            fos.write(' ');
            fos.write('y');
            fos.write('o');
            fos.write('u');
            fos.write('!');
            //往文件里写入字节数据(一次一个字节数组)
            fos.write("\nDo you love me?".getBytes());
            //往文件里写入字节数据(一次一个字节数组)
            fos.write('\n');
            fos.write("I don't love you anymore!".getBytes(), 0, 25);//从下标为0的数据开始显示,显示25个长度的字符
            //提示用户文件写入成功
            System.out.println("恭喜!文件写入成功!");

            //创建文件字节输入流,读取文件,一个字节一个字节的读
            FileInputStream fis = new FileInputStream(file);
            // 方法一:-FOR循环
            int length = fis.available();//获取文件字节流中数据长度
            for (int i = 0; i < length; i++) {
                System.out.print((char) fis.read());//read()返回的是字节数据对应的ASCII码,插入(char)强行转换成字符显示
            }
            System.out.println();

            // 方法二:-While循环
            fis = new FileInputStream(file);
            int i;
            while ((i = fis.read()) != -1) {
                System.out.print((char) i);
            }
            System.out.println();

            // 方法三:-While循环(逐个字节数组读取)
            fis = new FileInputStream(file);
            byte[] b = new byte[6];//每次读取6个字节
            while (fis.read(b) != -1) {
                for (int k = 0; k < b.length; k++) {
                    System.out.print((char) b[k]);
                }

            }

        } catch (IOException e) {
            System.out.println("文件[" + file.getAbsolutePath() + "]创建失败!");
        }
        System.out.println();

        // 删除刚才创建的文件
        boolean isFileDeleted = file.delete();
        // 判断文件是否删除成功
        if (isFileDeleted) {
            System.out.println("文件[" + file.getAbsolutePath() + "]删除成功!");
        } else {
            System.out.println("文件[" + file.getAbsolutePath() + "]删除失败!");

        }
    }
}


在这里插入图片描述
思考题:如何利用文件读写操作完成文件的复制。
比如将D盘根目录的一个图片文件scenery01.jpg复制到E盘根目录,文件名改为scenery02.jpg。
创建FileCopy类,完成上述图片文件的复制工作。

package net.wek13文件读写;
import java.io.*;

/**功能:实现文件的复制
 *
 */
public class FileCopy {
    public static void main(String[] args) {
        File file1 = new File("d:/scenery01.jpg");
        File file2 = new File("e:/scenery02.jpg");

        try {
            FileInputStream fis= new FileInputStream(file1);
            FileOutputStream fos =new FileOutputStream(file2);

            byte[] b = new byte[1024];
            while (fis.read(b) != -1){
                fos.write(b);
            }
            System.out.println("文件["+file1.getAbsolutePath()+"]成功赋值到文件["+file2.getAbsolutePath()+"]");
        } catch (IOException e) {
            e.printStackTrace();
        }
        boolean isFileDeleted = file2.delete();

    }
}

(二)通过字符流来读写文件
FileReader,FileWriter,BufferedReader
1、创建FileReadWrite02类

package net.wek13文件读写;

import java.io.*;

/**
 * 功能:以文件字符流来实现文件读写操作
 * 作者:谯婷
 * 时间:2019.5.23
 */
public class FileReadWrite02 {
    public static void main(String[] args) {
        //创建File对象,指向文件
        File file = new File("Flower.txt");
        try {
            //创建指定文件
            file.createNewFile();
            //提示用户文件创建成功
            System.out.println("文件["+file.getAbsolutePath()+"]创建成功!");
            //创建文件字符输出流
            FileWriter fw = new FileWriter(file);
            //1.逐个字符写入文件
            fw.write('f');
            fw.write('l');
            fw.write('o');
            fw.write('w');
            fw.write('e');
            fw.write('r');
            fw.flush();
            //提示用户逐个字符写入文件成功
            System.out.println("逐个字符写入文件成功!");
            //2.将字符串写入文件
            fw.write("\nyou are so beautiful.");
            //提示用户字符串写入文件成功
            System.out.println("字符串写入文件成功!");
            //3.将字符数组写入文件
            char[] cs ={'\n','o','o','p','s',',','m','y',' ','b','a','b','y','!'};
            fw.write(cs);
            //提示用户字符数组写入文件成功
            System.out.println("字符数组写入文件成功!");
            //关闭文件字符输出流
            fw.close();

            //创建文件字符输入流
            FileReader fr = new FileReader(file);
            //1.逐个字符读取文件内容,采用while循环
            int i;
            while ((i = fr.read()) != -1){
                System.out.print((char) i);
            }
            System.out.println();

            //2.按字符数组来读取文件,采用while循环
            fr = new FileReader(file);
            char[] cf = new char[6];
            while(fr.read(cf)!=-1){
                for(int k = 0;k <cf.length;k++){
                    System.out.print(cf[k]);
                }
            }
            System.out.println();
            //3.行读取文件,采用缓冲字符输入流与while循环
            BufferedReader br = new BufferedReader(new FileReader(file));
            String nextLine = null;
            while ((nextLine= br.readLine())!=null){
                System.out.println(nextLine);
            }
        } catch (IOException e) {
            System.err.println("文件["+file.getAbsolutePath()+"]创建失败!");

        }
    }
}

(三)通过随机存取文件来进行读写操作
随机存取文件,进水管与出水管是同一根水管,既可以读,也可以写,使用起来相当方便。下面我们通过案例来学习如何使用随机存取文件来进行读写操作。
1、创建RandomAccessFileDemo

package net.wek13文件读写;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;

/**
 * 功能:演示随机存取文件的读写操作
 *
 */
public class RandomAccessFileDemo {
    public static void main(String[] args) {
        try {
            //创建随机存取文件对象
            RandomAccessFile raf = new RandomAccessFile("flower.txt","rw");
            //1.逐个字节读取文件内容,采用for循环
            long length = raf.length();
            for (int i = 0 ;i<length;i++){
                System.out.print((char) raf.read());
            }
            System.out.println();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值