java io流对文件的增删改查

文件中有如下数据:1张三2332张三2553张三2664张三277想对第三行中的数据77修改,其他的都不变怎么做我现在把第一个和最后一个数据放入map中,根据Key值找到... 文件中有如下数据:
1 张三 2 33
2 张三 2 55
3张三 2 66
4 张三 2 77
想对第三行中的数据77修改,其他的都不变怎么做
我现在把第一个和最后一个数据放入map中,根据Key值找到然后修改,可是修改后文件中的数据总是不改变是怎么回事。在线等答案。。。
我就想知道我是可以只对单行的数据修改,还是必须全部读出来,修改某一个后在全部写进去
展开
 我来答
198901245631
2015-07-02 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1735万
展开全部
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的查找、增加、删除、修改操作。
举例:
BufferedReader bre = null;
OutputStreamWriter pw = null;//定义一个流
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
if(str.indexOf("排除")<0){//判断是否需要舍弃
pw.write(str);//将要写入文件的内容,可以多次write
}
}
bre.close();//关闭流
pw.close();//关闭流
解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
百度网友0e59674
2012-05-15 · 超过26用户采纳过TA的回答
知道答主
回答量:121
采纳率:0%
帮助的人:66万
展开全部
无论你要做什么样的修改,都必须知道文件中的所有数据(在文件末尾追加内容除外),比如你要修改某个值,先取出文件中的所有数据,然后做修改,之后将全部数据写入文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-15
展开全部
把你操作操作文件写入文件的代码贴出来 ,还是没看到你修改值了,我读出来accountid是方法的参数,输入随便的一个id 获得他的blance。这个方法只能看到这些内容 。全部拿出来,挑你想修改的部分修改之后,再将数据完全覆盖到源文件上。但是如果在数据库中操作不必这样,直接update table set 字段=‘a’ where 就可以指定字段更新
更多追问追答
追问
我也能从文件中取值然后操作,关键是现在想要在把它写进去。现在要么是作为一条新的数据添加了进去,要么就是把文件中所有的数据都覆盖了,我就想覆盖他对应的那一条数据,怎么做?比如我传个accountid是3,然后想把后面的66修改在保存文件中
追答
抱歉,目前io包没发现这样的类与方法。只可以追加 不可以随意位置替换。只能内存整理好数据完全覆盖。你说的这种需求不存在,这种情况下都是采用xml实现的,既然你想模仿数据库,xml应该是你的选择,而不是txt
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dngoryaner
2012-05-15 · TA获得超过2350个赞
知道小有建树答主
回答量:2404
采纳率:0%
帮助的人:1135万
展开全部
你是修改本地文件的数据。还是修改JAVA中MAP的数据?
更多追问追答
追问
修改本地文件中的数据,因为要模拟数据库操作
追答
public String read(String filePath) {
BufferedReader br = null;
String line = null;
StringBuffer buf = new StringBuffer(); try { // 根据文件路径创建缓冲输入流br = new BufferedReader(new FileReader(filePath)); // 循环读取文件的每一行, 对需要修改的行进行修改, 放入缓冲对象中 while ((line = br.readLine()) != null) {// 此处根据实际需要修改某些行的内容if (line.startsWith("a")) {buf.append(line).append(" start with a"); }else if (line.startsWith("b")) {
buf.append(line).append(" start with b");}// 如果不用修改, 则按原来的内容回写else {buf.append(line);}buf.append(System.getProperty("line.separator")); } }catch (Exception e) {e.printStackTrace(); } finally { // 关闭流if (br != null) { try { br.close();} catch (IOException e) {br = null;}} } return buf.toString();}
/**
* 将内容回写到文件中
*/
public void write(String filePath, String content) {
BufferedWriter bw = null;try { // 根据文件路径创建缓冲输出流
bw = new BufferedWriter(new FileWriter(filePath)); // 将内容写入文件中bw.write(content);}
catch (Exception e) { e.printStackTrace();} finally { // 关闭流if (bw != null) {
try { bw.close(); }catch (IOException e) { bw = null; } }}}
/**
* 主方法
*/
public static void main(String[] args) {String filePath = "D:/try.txt"; // 文件路径
updateFile obj = new updateFile();obj.write(filePath, obj.read(filePath)); // 读取修改文件
}
字符太少。只能编成这样了。自己调整下格式啊、这个例子你自己还要根据你的实际情况做稍微的改动。就OK了。希望能帮上你
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanghao146
2012-05-15
知道答主
回答量:33
采纳率:0%
帮助的人:4.5万
展开全部
jhvvmvmvmv555555
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式