题目要求:

1.可以往一个文本文档中写入员工信息:name,id和详情

2.可以更改name

package FanCQ.Xue.practice;

import java.io.*;
import java.util.Scanner; /*
* @author XueWeiWei
* @date 2019/3/31 20:13
*/
public class Xue_RW {
public static void main(String[] args) throws IOException {
//创建一个文本文件,如果已经存在,则告知用户:The file was created
File file = new File("./demo.txt");
if (file.exists()){
System.out.println("The file was created.");
}else {
file.createNewFile();
}
RandomAccessFile randomAccessFile = new RandomAccessFile("./demo.txt","rw"); //使用RandomAccessFile类对文件进行随意修改
//让用户进行操作选择(1.往文本文件中插入数据;2.修改文本文件的数据;0.退出该程序)
System.out.println("插入,输入1");
System.out.println("修改,输入2");
System.out.println("退出,输入0");
System.out.println("输入你的选择:");
Scanner scanner = new Scanner(System.in);
int choose = Integer.parseInt(scanner.next());
XWW xww = new XWW(); //初始化要写入文件的类
int i=0; //使用变量i来记录文本文件的行数
//使用BufferedReader来进行文件的按行读取
FileReader fileReader = new FileReader("./demo.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuilder sh = new StringBuilder(); //使用StringBuilder来将读取的数据填充到一个字符串内,容易进行查找与修改
String[] str = new String[20]; //使用数组str[]将文本文件的每一行数据进行存储,放到StringBuilder中
while ( ( str[i] = bufferedReader.readLine() ) != null){
sh.append(str[i]);
i++;
}
// System.out.println("i的值:" + i);
do {
if (choose == 1){
//如果是初次写入数据,将指标放到文件开头,放到文件末尾
if (i>0){
randomAccessFile.seek(randomAccessFile.length());
}else {
randomAccessFile.seek(0);
}
//输入类的三个信息,并进行写入
System.out.println("name:");
String name = scanner.next();
System.out.println("id:");
String id = String.valueOf(scanner.next());
System.out.println("text:");
String text = scanner.next();
xww.setName(name);
xww.setId(id);
xww.setText(text);
xww.write(randomAccessFile);
//写入一行,增加一行数据
i++;
//同时stringBuilder中也要增加数据
sh.append(name).append(id).append(text);
}
if (choose == 2){
System.out.println("当前一共" +(i) + "行数据");
System.out.println("输入你想修改的数据name:");
String s = scanner.next();
System.out.println("输入你想修改后的数据name(请输入和想修改name的信息等长!!!!):");
String s1 = scanner.next();
System.out.println("字符串的位置" + sh.indexOf(s));
System.out.println(sh);
//使用start来查找到想要修改数据的位置
int start = sh.indexOf(s);
if (start == -1){
System.out.println("您所想要修改的数据不存在");
}else {
// if (s.length()<=s1.length()){
randomAccessFile.seek(start);
xww = new XWW(s1,"","");
xww.write2(randomAccessFile);
// }else {}
}
}
System.out.println("输入你的选择:");
choose = Integer.parseInt(scanner.next());
}while (choose != 0); bufferedReader.close();
fileReader.close();
// XWW xww0 = new XWW("薛卫卫","110","我是16智71班薛卫卫");
// randomAccessFile.seek(0);
// xww0.write(randomAccessFile);
//
// String name = scanner.next();
// xww0.setName(name);
// xww0.write(randomAccessFile);
// randomAccessFile.seek(0);
//
// XWW xww1 = new XWW();
// xww1.read(randomAccessFile);
// System.out.println(xww1.name + " " + xww1.id + " " + xww1.text);
}
}
class XWW{
public String name;
public String id;
public String text; public XWW() {
} public XWW(String name, String id, String text) {
this.name = name;
this.id = id;
this.text = text;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
} //将三个数据进行写入,同时换行
public void write(RandomAccessFile randomAccessFile) throws IOException {
randomAccessFile.writeUTF(name);
randomAccessFile.writeUTF(id);
randomAccessFile.writeUTF(text);
randomAccessFile.writeUTF("\n");
} //将三个数据读取文件
public void read(RandomAccessFile randomAccessFile) throws IOException {
this.name=randomAccessFile.readUTF();
this.id=randomAccessFile.readUTF();
this.text=randomAccessFile.readUTF();
}
//修改名字
public void write2(RandomAccessFile randomAccessFile) throws IOException {
randomAccessFile.writeUTF(name);
}
}

java往文本文件中写入信息并修改的更多相关文章

  1. (转)linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息

    众所周知,使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 本文介绍如何将 echo 命令与 sudo 命令配合使用,实现向那些只有系统管理员才有权限操作的文件中写入信息.   比如 ...

  2. Java 实现word 中写入文字图片的解决方案

    JAVA生成WORD文件的方法目前有以下两种方式: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案; 一种是poi但是他的excel处理很程序 ...

  3. JAVA 读取计算机中相关信息

    java读取 计算机 cup号 读取版本号 显卡 .. . . ........ .. . . . package com.swt.common.util; import java.io.Buffer ...

  4. JAVA如何以追加的方式向文件中写入信息?

    以FileWriter类为例: FileWriter的构造方法中有一个方法是:FileWriter(String fileName, boolean append)  ,其中第二个参数决定了写文件的方 ...

  5. 向properties文件中写入信息(针对获取properties文件失败的总结)

    前段时间项目需要将某个属性动态的写入项目发布路径下的properties文件中;但是实际发布时发现找不到maven项目resource路径下的project.properties文件,调试多次代码如下 ...

  6. C#向文本文件中写入日志

    今天看了一篇文章,说的是使用微软自带的日志类写日志,然后晚上我就花了2个多小时自己动手试了一下,然后模仿者自己封装了一个类库. 下面是自己封转的类: /***** * 创建人:金河 * 创建日期:20 ...

  7. Eclipse Java EE IDE中jsp页面编码修改

    Eclipse Java EE IDE模板编码是ISO8859,肯定不是我们需要的,修改方法如下图: 依次点击:Window---->Preference---->Web---->J ...

  8. java向mysql中写入中文出现乱码

    乱码的原因有很多,我遇到的原因是url配置的问题,解决方案: 将: jdbc.url=jdbc:mysql://localhost:3306/XXXX?useUnicode=true&char ...

  9. Java基础知识强化之IO流笔记51:IO流练习之 键盘录入学生信息按照总分排序写入文本文件中的案例

    1.  键盘录入学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分排序写入文本文件中 分析:   A:创建学生类   B:创建集合对象      TreeSet<Student>   ...

随机推荐

  1. yii框架多文件上傳

    //控制器層 <?phpnamespace app\controllers; use app\models\Uploads;use Yii;use yii\web\Controller;use ...

  2. 如何成长为一名合格的web架构师?

    写代码要经历下面几个阶段.  一 .你必须学习面向对象的基础知识,如果连这个都忘了,那你的编程之路注定是在做原始初级的重复! 很多程序员都知道类.方法.抽象类.接口等概念,但是为什么要面向对象,好处在 ...

  3. Spring Boot使用MyBatis Generator、Swagger

    MyBatis是Java目前主流的ORM框架,在Spring Boot中使用MyBatis可以参考这篇文章:http://www.ityouknow.com/springboot/2016/11/06 ...

  4. Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?

    Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...

  5. Python程序中的协程操作-gevent模块

    目录 一.安装 二.Gevent模块介绍 2.1 用法介绍 2.2 例:遇到io主动切换 2.3 查看threading.current_thread().getName() 三.Gevent之同步与 ...

  6. ES6_09_Generator函数

    Generator函数: 概念: 1.ES6提供的解决异步编程的方案之一 2.Generator函数是一个状态机,内部封装了不同状态的数据, 3.用来生成遍历器对象 4.可暂停函数(惰性求值), yi ...

  7. Maven下载Jar包(bat脚本)

    1.创建一个bat文件叫download.bat 2.里面写入以下代码 call mvn -f pom.xml dependency:copy-dependencies 3.创建pom.xml文件 4 ...

  8. Minimum Spanning Tree

    前言 说到最小生成树(Minimum Spanning Tree),首先要对以下的图论概念有所了解. 图 图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象.图的定义方式有两种 ...

  9. NioEventLoop启动流程源码解析

    NioEventLoop的启动时机是在服务端的NioServerSocketChannel中的ServerSocketChannel初始化完成,且注册在NioEventLoop后执行的, 下一步就是去 ...

  10. LINUX_记录(一)

    我有了一台电脑,有好多的硬件,CPU啊.内存啊.光驱啊.硬盘啊等等,我不想装windows,我想装linux,我就装了一个linux.事实上,可以跑,没问题,我在思考,why? 我装的linux,包括 ...