java实验八文件IO处理实验

一、题目描述

所有异常,全部在调用方法内捕获处理

将以下IOTest类的全部方法实现
public class IOTest {
public static void main(String[] args) {
String fileName = “C:/example/from.txt”;

    System.out.println("----- 创建文件 ------");
    createFile(fileName);

    System.out.println("-----  将字符串写入文件 -------");
    // \r\n在txt文本中换行
    String str =
            "白日依山尽\r\n" +
                    "黄河入海流\r\n" +
                    "欲穷千里目\r\n" +
                    "更上一层楼\r\n";
    writeToFile(str, fileName);

    System.out.println("--------- 基于基本IO流实现文件的复制 ----------");
    String toFile = "C:/example/to.txt";
    copyByIO(fileName, toFile);

    System.out.println("--------- 基于NIO实现文件的复制 ----------");
    String toFile2 = "C:/example/nio/to.txt";
    copyByIO(fileName, toFile2);

    System.out.println("---------- 删除指定文件 -------------");
    deleteFile(toFile);
    System.out.println("---------- 遍历指定目录文件 -------------");
    String dir = "C:/example";
    walkDirectories(dir);
}

/**
 * 基于指定文件名称创建目录及文件
 * 如果文件已经存在,则忽略
 *
 * @param fileName
 */
private static void createFile(String fileName) {

}

/**
 * 提示:文件以字节操作,因此可以
 * 字符串,转字节数组,直接基于Files写入文件
 *
 * @param fileName
 * @param content
 */
private static void writeToFile(String fileName, String content) {
}

/**
 * 基于基本IO,以及字节数组缓冲区,复制文件
 * 打印显示循环读写循环次数
 *
 * @param sourceFile
 * @param targetFile
 */
private static void copyByIO(String sourceFile, String targetFile) {

}

/**
 * 基于NIO,实现文件的复制
 *
 * @param sourceFile
 * @param targetFile
 */
private static void copyByNIO(String sourceFile, String targetFile) {

}

/**
 * 删除文件
 *
 * @param fileName
 */
private static void deleteFile(String fileName) {

}

/**
 * 遍历打印指定目录下全部目录/文件名称
 *
 * @param dir
 */
private static void walkDirectories(String dir) {

}

}

二、代码实现

题目一内容:
 import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class IOTest {
    public static void main(String[] args) {
        String fileName = "C:/example/from.txt";

        System.out.println("----- 创建文件 ------");
        createFile(fileName);

        System.out.println("-----  将字符串写入文件 -------");
        // \r\n在txt文本中换行
        String str =
                "白日依山尽\r\n" +
                        "黄河入海流\r\n" +
                        "欲穷千里目\r\n" +
                        "更上一层楼\r\n";
        writeToFile( fileName,str);

        System.out.println("--------- 基于基本IO流实现文件的复制 ----------");
        String toFile = "C:/example/to.txt";
        copyByIO(fileName, toFile);

        System.out.println("--------- 基于NIO实现文件的复制 ----------");
        String toFile2 = "C:/example/nio/to.txt";
        copyByNIO(fileName, toFile2);

        System.out.println("---------- 删除指定文件 -------------");
        deleteFile(toFile);
        System.out.println("---------- 遍历指定目录文件 -------------");
        String dir = "C:/example";
        walkDirectories(dir);
    }

    /**
     * 基于指定文件名称创建目录及文件
     * 如果文件已经存在,则忽略
     *
     * @param fileName
     */
    private static void createFile(String fileName) {
    	Path path=Paths.get(fileName);
    	try {
    		if(!Files.exists(path)) {
			Files.createDirectories(path.getParent());
			Files.createFile(path);
    		}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

    }

    /**
     * 提示:文件以字节操作,因此可以
     * 字符串,转字节数组,直接基于Files写入文件
     *
     * @param fileName
     * @param content
     */
    private static void writeToFile(String fileName, String content) {
    	
    	Writer writer=null;
    	try {
			writer =new FileWriter(fileName);
			writer.write(content);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	finally {
    		if(writer!=null)
				try {
					writer.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    	}
    	
    }

    /**
     * 基于基本IO,以及字节数组缓冲区,复制文件
     * 打印显示循环读写循环次数
     *
     * @param sourceFile
     * @param targetFile
     */
    private static void copyByIO(String sourceFile, String targetFile) {

    	createFile(targetFile);
    	Writer writer=null;
    	Reader reader=null;
    	try {
			reader=new FileReader(sourceFile);
			writer=new FileWriter(targetFile);
			char[] cbuf=new char[1024];
			reader.read(cbuf);
			writer.write(cbuf);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	finally {
    		if(writer!=null)
				try {
					writer.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		if(reader!=null)
				try {
					reader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    	}
    }

    /**
     * 基于NIO,实现文件的复制
     *
     * @param sourceFile
     * @param targetFile
     */
    private static void copyByNIO(String sourceFile, String targetFile) {

    	createFile(targetFile);
    	Path sourcePath=Paths.get(sourceFile);
    	Path taggetPath=Paths.get(targetFile);
    	try {
			Files.copy(sourcePath, taggetPath,StandardCopyOption.REPLACE_EXISTING);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    /**
     * 删除文件
     *
     * @param fileName
     */
    private static void deleteFile(String fileName) {

    	Path path=Paths.get(fileName);
    	try {
			Files.delete(path);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }

    /**
     * 遍历打印指定目录下全部目录/文件名称
     *
     * @param dir
     */
    private static void walkDirectories(String dir) {

    	Path path=Paths.get(dir);
    	try {
			Files.walk(path).forEach(s->System.out.println(s));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我的大男子主义

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

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

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

打赏作者

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

抵扣说明:

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

余额充值