• 练习-Java输入输出之随机IO流之向文件中指定位置添加内容


    任务描述

    本关任务:向给定文件中的指定位置添加给定内容。

    编程要求

    仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,向给定文件中的指定位置添加给定内容,具体要求如下:

    • 接收给定的一行字符串(如:/test/a.txt,23,hello。第一部分为给定文件路径,第二部分为插入位置,第三部分为插入内容);
    • 向文件中指定位置添加给定内容。

    思路点拨:我们可以把插入点之后的内容先读取到临时文件,再把给定内容和临时文件中的内容依次追加到插入点之后。

    1. import java.io.*;
    2. import java.util.Arrays;
    3. import java.util.Scanner;
    4. public class FileTest {
    5. public static void main(String[] args) throws IOException {
    6. Scanner scanner = new Scanner(System.in); // 接收给定字符串
    7. String str = scanner.nextLine();
    8. // 请在Begin-End间编写完整代码
    9. /********** Begin **********/
    10. // 切割字符串
    11. String[] arr = str.split(",");
    12. //创建一个临时文件
    13. File temp = File.createTempFile("temp",null);
    14. temp.deleteOnExit(); // 程序退出时删除临时文件
    15. // 将插入点之后的内容保存到临时文件
    16. try (
    17. RandomAccessFile accessFile = new RandomAccessFile(new File(arr[0]), "rw"); // 以读写的方式创建一个RandomAccessFile对象
    18. FileOutputStream fileOutputStream = new FileOutputStream(temp);
    19. FileInputStream fileInputStream = new FileInputStream(temp);
    20. ){
    21. accessFile.seek(Integer.parseInt(arr[1])); // 把文件记录指针定位到给定的插入位置
    22. byte[] bytes = new byte[1024];
    23. int hasRead = 0; // 用于保存实际读取的字节数据
    24. while ((hasRead = accessFile.read(bytes)) != -1) { // 使用循环读取插入点后的数据
    25. fileOutputStream.write(bytes, 0, hasRead); // 将读取的内容写入临时文件
    26. }
    27. // 将给定的内容和临时文件中的内容依次追加到原文件的插入点后
    28. accessFile.seek(Integer.parseInt(arr[1])); // 把文件记录指针重新定位到给定位置
    29. accessFile.write(arr[2].getBytes()); // 追加需要插入的内容
    30. while ((hasRead = fileInputStream.read(bytes)) != -1) { // 追加临时文件中的内容
    31. accessFile.write(bytes, 0, hasRead);
    32. }
    33. }
    34. /********** End **********/
    35. }
    36. }

     

  • 相关阅读:
    数据结构——堆
    C#中BitConverter.ToUInt16、BitConverter.ToUInt32原理与用法详解
    尚硅谷webpack5笔记base部分
    数据结构与算法(C语言版)P3.2---链表之带头双向循环链表的实现
    Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)
    【Godot】数据响应的方式执行功能
    Linux入门学习12
    6. 工业大数据的实施策略
    mysql value 和values的区别
    C++ 多线程 线程安全队列设计
  • 原文地址:https://blog.csdn.net/weixin_46075438/article/details/128130257