第1关:练习-Java输入输出之随机IO流之向文件中指定位置添加内容
任务描述
本关任务:向给定文件中的指定位置添加给定内容。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,向给定文件中的指定位置添加给定内容,具体要求如下:
- 接收给定的一行字符串(如:/test/a.txt,23,hello。第一部分为给定文件路径,第二部分为插入位置,第三部分为插入内容);
- 向文件中指定位置添加给定内容。
思路点拨:我们可以把插入点之后的内容先读取到临时文件,再把给定内容和临时文件中的内容依次追加到插入点之后。
创建临时文件方法:
// 创建一个名为tmp的临时文件,内容为空
File tmp=File.createTempFile("tmp",null);
// 程序退出时删除临时文件
tmp.deleteOnExit();
注意:给定字符串中的逗号为中文逗号。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
/test/a.txt,10,hello
预期输出(后台使用 cat 命令查看给定文件和其他文件内容产生的结果):
dsff$%9sd*hellofsfdscsd
Z23ssdfkdZGfnl%v9
zhhelloe78FDE5@lloa
QJh&hadoopdg897
fds8sparkflink9!@#
注意:最后有一个空行。
开始你的任务吧,祝你成功!
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class FileTest {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in); // 接收给定字符串
String str = scanner.nextLine();
// 请在Begin-End间编写完整代码
/********** Begin **********/
// 切割字符串
String[] strs= str.split(",");
// 创建一个临时文件
File tem=new File(strs[0]);
// 将插入点之后的内容保存到临时文件
RandomAccessFile raf = new RandomAccessFile(tem,"rw");
//设置指针位置
raf.seek(Long.parseLong(strs[1]));
//读取指针后面的字符数并返回
byte[] by=new byte[1024];
int len =raf.read(by);
//上面读取后指针位置发生移动,再次设置指针位置
raf.seek(Long.parseLong(strs[1]));
// System.out.println();
//先写入指定字符,在写人前面读取的s并指定写入长度,防止空格
raf.write(strs[2].getBytes());
raf.write(by,0,len);
raf.close();
// 将给定的内容和临时文件中的内容依次追加到原文件的插入点后
/********** End **********/
}
}