java往文本文件中写入信息并修改
题目要求:
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往文本文件中写入信息并修改的更多相关文章
- (转)linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息
众所周知,使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 本文介绍如何将 echo 命令与 sudo 命令配合使用,实现向那些只有系统管理员才有权限操作的文件中写入信息. 比如 ...
- Java 实现word 中写入文字图片的解决方案
JAVA生成WORD文件的方法目前有以下两种方式: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案; 一种是poi但是他的excel处理很程序 ...
- JAVA 读取计算机中相关信息
java读取 计算机 cup号 读取版本号 显卡 .. . . ........ .. . . . package com.swt.common.util; import java.io.Buffer ...
- JAVA如何以追加的方式向文件中写入信息?
以FileWriter类为例: FileWriter的构造方法中有一个方法是:FileWriter(String fileName, boolean append) ,其中第二个参数决定了写文件的方 ...
- 向properties文件中写入信息(针对获取properties文件失败的总结)
前段时间项目需要将某个属性动态的写入项目发布路径下的properties文件中;但是实际发布时发现找不到maven项目resource路径下的project.properties文件,调试多次代码如下 ...
- C#向文本文件中写入日志
今天看了一篇文章,说的是使用微软自带的日志类写日志,然后晚上我就花了2个多小时自己动手试了一下,然后模仿者自己封装了一个类库. 下面是自己封转的类: /***** * 创建人:金河 * 创建日期:20 ...
- Eclipse Java EE IDE中jsp页面编码修改
Eclipse Java EE IDE模板编码是ISO8859,肯定不是我们需要的,修改方法如下图: 依次点击:Window---->Preference---->Web---->J ...
- java向mysql中写入中文出现乱码
乱码的原因有很多,我遇到的原因是url配置的问题,解决方案: 将: jdbc.url=jdbc:mysql://localhost:3306/XXXX?useUnicode=true&char ...
- Java基础知识强化之IO流笔记51:IO流练习之 键盘录入学生信息按照总分排序写入文本文件中的案例
1. 键盘录入学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分排序写入文本文件中 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> ...
随机推荐
- yii框架多文件上傳
//控制器層 <?phpnamespace app\controllers; use app\models\Uploads;use Yii;use yii\web\Controller;use ...
- 如何成长为一名合格的web架构师?
写代码要经历下面几个阶段. 一 .你必须学习面向对象的基础知识,如果连这个都忘了,那你的编程之路注定是在做原始初级的重复! 很多程序员都知道类.方法.抽象类.接口等概念,但是为什么要面向对象,好处在 ...
- Spring Boot使用MyBatis Generator、Swagger
MyBatis是Java目前主流的ORM框架,在Spring Boot中使用MyBatis可以参考这篇文章:http://www.ityouknow.com/springboot/2016/11/06 ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- Python程序中的协程操作-gevent模块
目录 一.安装 二.Gevent模块介绍 2.1 用法介绍 2.2 例:遇到io主动切换 2.3 查看threading.current_thread().getName() 三.Gevent之同步与 ...
- ES6_09_Generator函数
Generator函数: 概念: 1.ES6提供的解决异步编程的方案之一 2.Generator函数是一个状态机,内部封装了不同状态的数据, 3.用来生成遍历器对象 4.可暂停函数(惰性求值), yi ...
- Maven下载Jar包(bat脚本)
1.创建一个bat文件叫download.bat 2.里面写入以下代码 call mvn -f pom.xml dependency:copy-dependencies 3.创建pom.xml文件 4 ...
- Minimum Spanning Tree
前言 说到最小生成树(Minimum Spanning Tree),首先要对以下的图论概念有所了解. 图 图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象.图的定义方式有两种 ...
- NioEventLoop启动流程源码解析
NioEventLoop的启动时机是在服务端的NioServerSocketChannel中的ServerSocketChannel初始化完成,且注册在NioEventLoop后执行的, 下一步就是去 ...
- LINUX_记录(一)
我有了一台电脑,有好多的硬件,CPU啊.内存啊.光驱啊.硬盘啊等等,我不想装windows,我想装linux,我就装了一个linux.事实上,可以跑,没问题,我在思考,why? 我装的linux,包括 ...