Java问题

直接把s赋给readContent不就行了为什么还要用stringbuffer... 直接把s赋给readContent不就行了为什么还要用stringbuffer 展开
 我来答
李磊_1
2019-09-06 · TA获得超过299个赞
知道小有建树答主
回答量:337
采纳率:66%
帮助的人:119万
展开全部

这里直接把s赋值给readContent是有问题的,问题点如下:

假设文件有两行

第一行

第二行

则读取循环两次,第一次s赋值给readContent,readContent的值为 "第一行",然后又循环,读取第二行,再次赋值,则readContent就会变成 "第二行",第一行的值就丢失了;

这里StringBuff的作用是把读取到的内容连接起来成为一个字符串;

不过这里的例子的确有问题,问题却不在StringBuffer上,而在 s 变量上,s中间两步是不必要的,循环内直接改成如下形式:

删除s.getBytes()和new String

另外,除了以上问题,来总结下这段代码的问题吧:

1、文件资源没有释放

2、在不涉及多线程的情况下,应使用StringBuilder类进行字符串拼接,而不是StringBuffer,因为StringBuilder更快(但是StringBuilder线程不安全,StringBuffer线程安全);

3、异常处理有问题,如果出现IO异常,就返回异常信息的字符串?那么如何区分这个字符串是发生了异常还是从文件中读取到的内容呢?这里不应该返回字符串,而是直接声明异常,有异常就向外抛,直到能处理的顶层程序处理。

基于以上几点,修改代码如下:

注意第27行,声明本方法可能抛出 IOException 异常,稍后主程序将进行处理。另外注意第30行,创建InputStreamReader 的时候指定了文件编码为utf8,以避免乱码,你的文件如果存储的是其他编码类型,则会出现乱码。

调用代码如下:

getContent函数调用主程序

注意18行和21行,是分别处理正常情况和异常情况,当读取异常时,将会调用第21行,打印异常信息;

整体代码如下:

全部代码

接下来我们看看代码执行情况。

1、当我们要读的文件不存在时,执行结果如下:

我们要读的文件不存在时,抛出异常

看,当文件不存在时,抛出异常,并由异常处理程序捕获和打印,你可以看到具体哪一行代码出错[getContent(App.java:29)],说明在App.java 文件中的getContent方法,文件的29行出错。

2、那么正常情况下呢?当然是输出文件内容了,我们放一个有如下内容的文件在"D:\\file.txt"处:

要读取的文件内容

执行结果如下:

正常情况下,输出文件内容

最后,我不知道你看的是什么书,是不是课本,但感觉质量不高,这里给你推荐几本,可以买来看看:

1、Head First java

2、菜鸟教程 Java

3、最权威的,自然是The Java® Language Specificati

祝你学习之路顺利

alexzjs
2019-09-06 · 知道合伙人IT服务行家
alexzjs
知道合伙人IT服务行家
采纳数:124 获赞数:195
蚂蚁金服安全计算平台核心技术专家

向TA提问 私信TA
展开全部
Java里面String是不能更改的,Stringbuffer则是可以的。打个比方,String类似于常量,想要做操作需要重新定义一个变量,然后把这个常量先赋值给变量,然后对变量进行操作,最后把这个新的变量变成新的常量在赋值给最终的结果。用Stringbuffer就相当于显式定义了这个变量,对变量进行多次操作的开销比较小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
支恺源长霞
2019-09-10 · TA获得超过3769个赞
知道大有可为答主
回答量:3052
采纳率:32%
帮助的人:227万
展开全部
可以用XML文件进行存储,也可以对数据进行增删改查,但不如数据库灵活。再就是proterites文件也可以存储。在java中有专门操作这些文件的类。操作xml一般用dom4j。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
歧章窦曦
2019-09-15 · TA获得超过3820个赞
知道小有建树答主
回答量:3106
采纳率:26%
帮助的人:228万
展开全部
(1)检查sim卡是否可用。
(2)刚开机不久,java引擎忙碌。
如果都不行,卸载后重装一下看看。(该文件格式为jar)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e6fe13c
2019-09-06
知道答主
回答量:74
采纳率:50%
帮助的人:6.2万
展开全部
因为对String字符串加减都底层都是调用的stringbuffer 然而不用字符串加减的情况下String又比stringbuffer快, 所以如题:字符串加减的时候用stringbuffer,而定义临时变量时用String,由于 返回要求String 所以最有又有一个stringbuffer强转String

纯手打 回答完毕 给采纳 谢谢
还有我看了一下下面别人的回答 线程不安全。。。看你用在哪里呢啊 这里怎么会不安全,现在都用8G,16G意思是反正内存打,内存都随便开销,都这样想尼玛 估计一个程序就吧内存用完了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式