字节流和字符流的应用

题目:

  • 将电脑上的图片复制到IDEA的环境中

  • 将一篇文章通过流写入文本文件中,再获取文本,并统计每一个字和标点符号出现的次数

思路:

  1. 有点类似于爬虫。因为图片一般比较大,所以这里我们展开了为BufferStream类来提高效率。同样情况适合视频写入和读出

  1. 文本文字考虑在一开始的时候就开始统计字数,那么应该为InputStream的时候,因为文字和符号较多,采用map的形式,最后同样传导文本,进行统计字数:有相同的文字则直接ch+1,不同,则导入map开始ch=1。


packagef_io.b_byteStream;
importjava.io.*;//导入java.io包中的所有类
importjava.util.Scanner;//导入java.util包中的Scanner类
importjava.util.*;
public classStreamPratice {
//读取图片,考虑图片在计算机中存储形式为二进制文件,以字节流的形式来读取
public static voidtest01(){
        FileInputStream fis=null;
        FileOutputStream fos=null;
longtime1=System.currentTimeMillis();
//先从外面读取图片,用字节流的输入流,使用绝对路径
try{
            fis =newFileInputStream("myink.jpg");
            BufferedOutputStream bos=newBufferedOutputStream(fos);
            BufferedInputStream bis=newBufferedInputStream(fis);
//这里用bufferStream缓冲流更节约时间,有利于大流量到的视频或者图片下载
fos =newFileOutputStream("ink.jpg");
intlen;
while((len = fis.read()) != -1) {
                fos.write(len);
            }
        }catch(Exception e)
                {
                    e.printStackTrace();
                    System.out.println("图片读取失败");
                }
finally{
try{
                        fis.close();
                    }catch(Exception e) {
                        e.printStackTrace();
                        System.out.println("读取关闭失败");
                    }
try{
                        fos.close();
                    }catch(Exception e) {
                        e.printStackTrace();
                        System.out.println("写入关闭失败");
                    }
                }
longtime2=System.currentTimeMillis();//这里可以测算时间,bufferStream更快
System.out.println("运行时间为:"+(time1-time2));
        }
//读取文本文件practice2
public static  voidtest02()throwsIOException {
        BufferedReader br =null;
        BufferedWriter bw =null;
try{
            Map<Character,Integer> map =newHashMap<>();
            br=newBufferedReader(newFileReader("C:\\Users\\ASUS\\Pictures\\20230227.txt"));
intc=0;
//br.read()方法读的是字符的ASCII码
while((c=br.read())!=-1){
charch=(char)c;
if(map.get(ch)==null){
                    map.put(ch,1);//如果对应的字符个数为null,那就直接给该字符赋值1
}
else{
//如果个数已存在,那就直接得到它的个数再加1就可以了
map.put(ch,map.get(ch)+1);
                }
            }
            bw=newBufferedWriter(newFileWriter("wordcount.txt"));//写入wordcount.txt文档
Set<Map.Entry<Character,Integer>> entrySet =map.entrySet();//范式,这里文本包括了字符和整型
for(Map.Entry<Character,Integer> entry:entrySet){
switch(entry.getKey()){
case' ':
                        bw.write("空格="+entry.getValue());
break;
case'\t':
                            bw.write("tab键="+entry.getValue());
break;
case'\r':
                                bw.write("回车键="+entry.getValue());
break;
case'\n':
                                    bw.write("换行键="+entry.getValue());
break;
//自己可统计更多的符号和特殊字
default:
                                bw.write(entry.getKey()+"="+entry.getValue());
break;
                        }
                        bw.newLine();
                    }
                }finally{
if(bw!=null) bw.close();
if(br!=null)br.close();
                }
            }
public static  voidmain(String[] args)throwsIOException {
test01();
test02();
    }
}

运行结果:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NaifCat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值