• 练习-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. }

     

  • 相关阅读:
    有序表2:跳表
    火狐浏览器翻译页面功能如何设置
    【Linux 】getopts 可选参数_Bash技巧:介绍 getopts 内置命令解析选项参数的用法
    基于STC系列单片机实现定时器扫描数码管显示定时器/计数器产生频率的功能
    20个提升效率的JS简写技巧,告别屎山!
    [附源码]计算机毕业设计市场摊位管理系统Springboot程序
    搬家快递服务小程序的便利性
    javascript案例35——&&
    Spring 中的 Bean
    Flink1.15源码解析--启动JobManager----Dispatcher启动
  • 原文地址:https://blog.csdn.net/weixin_46075438/article/details/128130257