这2中方法都行吗?

这2中方法都行吗?

package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Speech {

	public static void main(String[] args) {
		try {
			FileInputStream a=new FileInputStream("speech.txt");
			File b=new File("speech.txt");
			int n=0;
			int count=0;
			System.out.print("文本内容:");
			while((n=a.read())!=-1) {
				System.out.print((char)n);
				count++;
			}
			System.out.println();
			System.out.println("统计结果:"+b.getName()+"文件中共有"+count+"个字节。");
			a.close();
			
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		
		
	}
	

}
package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Speech2 {

	public static void main(String[] args) {
		try {
			FileInputStream a=new FileInputStream("speech.txt");
			File q=new File("speech.txt");
			byte[]b=new byte[1000];
			int count=a.read(b);
			System.out.print("文本内容:");
			while((a.read(b))!=-1) {
				System.out.println(new String(b));
				count++;
			}
			System.out.println("统计结果:"+q.getName()+"文件中共有"+count+"个字节。");
			a.close();
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		

	}

}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,两种方式都是可以的,但是在第二种方法中,返回实际读取到字节数组中的字节,因为初始化char类型的数组为1000个,如果读取文件中的字节数小于1000,则会使用char类型的初始化方框补充,进行读取。例如如下输出结果:

http://img1.sycdn.imooc.com//climg/5d4559eb0001f2ed07060047.jpg

另外,在第二段代码中,应该将count值初始化为0,否则将不会输出内容,因为如果初始化为读取的字节数,进行count++将没有内容读出,具体见如下修改:

http://img1.sycdn.imooc.com//climg/5d455b7d0001392603100075.jpg

综上所述,建议使用第一种方式读取文件哦~

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 鏡花水月_ 提问者 #1
    如果循坏外设置int count=0;结果输出就是1字节 这要什么修改呢
    2019-08-05 11:55:54
  • 好帮手慕阿莹 回复 提问者 鏡花水月_ #2
    同学你好,统计字符的方法是多种多样的,同学的第二种方法直接用来统计字符是可以的,但是如果用count来统计就不合适了,就需要用第一种方法了。所以,如果同学追求符合作业要求,则只能用第一种了,如果说第二中,要么同学用来输入读取的文件,要么用来统计一次个数,不能使用两次a.read(b),同学也可以用纸杯蛋糕老师告诉你的方法。所以,要完全符合题意的话,就只能是第一种方法。
    2019-08-05 14:54:41
好帮手慕珊 2019-08-03 17:51:12

同学,你好!第二种方法并没有输出文本内容,更改结果如下:

不用使用循环了,因为a.read(b)已经将文件中的内容读取到数组b中了,count是实际读取的字节数,也就是字符的数量。通过new String(b,0,count)将数组b中前面count个字符转换为字符串,也就是将读取到数组b中的字符转换为字符串,然后输出即可。

http://img1.sycdn.imooc.com//climg/5d45587000014c6306540255.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鏡花水月_ #1
    如果没有循环没有COUNT++不就跑题了吗 除了第1种方法外还有方法实现任务要求的结果吗
    2019-08-05 11:55:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师