为了账号安全,请及时绑定邮箱和手机立即绑定

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 字符流: 1)编码问题 2)认识文本和文本文件 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码) 文件是byte byte。。。。的数据序列 文件文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为 byte的存储结果 3)字符流常用的类--》一般处理文本文件 reader(输出流),writer(输入流) 字符的处理:一次处理一个字符 字符的底层是基本的字节序列 字符流在java中的基本实现: InputStreamReader 完成byte流解析为char流,按照编码解析 OutputStreamWrite 提供char流到byte流,按照编码处理 代码: //对文件进行读操作 FileInputStream in=new FileInputStream("文件路径"); //默认按gbk编码,也可以指定编码方式,如果文件与默认不一致就要指定编码方式与文件编码方式一致 InputStreamReader isr=new InputStreamReader(in); //方法一单字节读取 int c; while((c=isr.read())!=-1){ System.out.print((char)c); } //方法二:批量读取 char[] buffer=new char[8*1024]; //批量读取存到buffer字符数组中 while((c=isr.read(buffer,0,buffer.length)!=-1){ String s=new String(buffer,0,C); System.out.print(s);}
    查看全部
  • 序列化与反序列化
    查看全部
  • http://hw1287789687.iteye.com/blog/1882947
    查看全部
  • BufferedInputStream及BufferedOutputStream<br> 为io提供带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,<br> 提高io的性能,文件流比作水<br> FileOutputStream-->write()一滴一滴将水转移<br> DataOutputStream-->writexx()相当于一瓢一瓢转移<br> BufferedOutputStream-->write 相当于一瓢一瓢移到桶中,再倒入另外一个缸中<br> <br> 代码:利用带缓冲的文件拷贝(单字节)<br> 第一步:先判断是否存在及是<br> 否是文件代码与之前一样<br> 第二步:创建带缓冲字节流<br> BufferedInputStream bis=new BufferedInputStream(<br> new FlieInputStream(srcFile));//srcFile为原文件<br> BufferedOutputStream bis=new BufferedOutputStream(<br> new FlieOutputStream(destFile));//destFile复制的文件<br> in c;<br> while((c=bis.read())!=-1){<br> bos.write(c);<br> bos.flush();//刷新缓冲区如果不写就写不到缓冲区<br> }<br> bis.close();<br> bos.colse(); 比较结果:批量字节读取文件最快
    查看全部
    1 采集 收起 来源:字节缓冲流

    2018-03-22

  • DataOutputStream/DataInputStream 对流功能的扩展,可以更加方便的读取,int long 字符等类型数据 writeInt/Double/UTF() 代码:DataOutputStream String file="demo/dos.dat"; DataOutputStream dos=new DataOutputStream( new FileOutputStream(file)); dos.writeInt(10); //采用utf-8写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国"); 代码:DataIntputStream DataInputStream dis=new DataInputStream( new FileInputStream(file)); int/long/Double/String i=dis.readInt/Long/Double/UTF();
    查看全部
  • raf.getFilePointer(); 结束后别忘了关闭
    查看全部
  • FlieOutputStream:实现向文件中写出byte数据的方法 代码: //如果该文件不存在,则直接创建,如果存在,删除后创建 FileOutputStream out=new FileOutputStream(file,true)//不用true则会被删除,用true就不会,直接追加内容,file文件对象或者路径 out.write(‘A’);//写出了A的第八位write只能写一个字节 out.write('B'); int a=10;//则write写int要写4次 out.write(a>>>24); out.write(a>>>16); out.write(a>>>8); out.write(a); //写汉字 byte[] gbk="中国".getBytes("gbk"); out.write(gbk); out.close(); 代码:文件的拷贝 public static void copyFile(File srcFile,File destFile)throws IOException{ //判断文件是否存在 if(!srcFile.exists()){ throw new IllegalArgumentException("文件"+srcFile+"不存在"); } //判断是不是文件 if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile)} } FileInStream in=new FileInStream(srcFile); FileOutStream out=new FileOutStream(destFile); byte[] buf=new byte[8*1024]; int b; while(()b=in.read(buf,0,buf.length))!=-1){ out.write(buf,0,b); out.flush();//最好加上 } in.close(); out.close();
    查看全部
  • char c: 2字节 byte b: 1字节 short s: 2字节 int i: 4字节 long l: 8字节 float f: 4字节 double d: 8字节
    查看全部
  • 方法1、//一次性读完 byte[] buf=new byte[20*1024]; int bytes=in.read(in,0,buf.length)); 方法2、 //读到-1结束 int bytes=0; while((bytes=in.read(buf,0,buf.length)!=-1){ for(inti=0;i<bytes;i++){ System.out.pint(Integer.toHexString(buf[i]&0xff)+" "} } 注: A、buf[i]&0xff作用:byte类型为8位,int类型为32位,为了避免数据转换错误,通过 &0xff将高24位清零 B、单字节读取不适合读取大文件(上节课的方法就是单字节读取)
    查看全部
  • IO流(输入流、输出流)--》字符流、字节流<br> 1、字节流<br> 1)输入流/输出流<br> inputStream:抽象了应用程序读取数据方式<br> OutPutStream抽象了应用程序写数据方式<br> 2)EOF=End 读到-1就读到结尾<br> 3)输入流基本方法<br> int b=in.read();//in输入流对象,读取一个字节无符号填充到int 低八位<br> int.read(byte[] buf);//读取数据填充到字节数组buf<br> int.read(byte[] buf,int start,int size);<br> 4)输出流基本方法<br> out.write(int b)//写一个byte到流,b的低8位<br> out.write(byte[] buf)//将buf 字节数组都写入到流<br> out.write(byte[] buf,int start,int size)//字节数组buf从star位置开始写size长度的字节到流笔记<br> 5)FlieInputStream:对文件的读操作<br> <br> 代码:<br> 读取指定文件内容,按照16进制输出到控制台,即使读取文件按字节输出,并且每输出10个byte就换行<br> 第一步:<br> <br> //文件作为字节流进行读操作<br> FlieInputStream in=new FileInputStream(fileName);//fileName:文件路径<br> int b;<br> int i=1;<br> while(b=in.read()!=-1){<br> System.out.print(Integer.toHexString(b)+"");<br> if(i++%10==0){<br> SyStem.out.println();<br> }<br> }<br> in.close(); 注:如果要将输出16进制位数一致则将输出前面加上: if(b<=oxf){ System.out.print("0");}
    查看全部
  • randomAccessFile: 1、java提供对文件内容的访问,即读写文件,支持随机访问文件及访问文件的任意位置 java文件模型:在硬盘上的文件是byte存储是数据的集合 2、打开文件:rw 读写 r 只读 RandomAccessFile raf=new RandomAccessFile (file,"rw") 存在一个指针,打开文件是指针头在0 pointer=0; 3、写方法:raf.write(int)--》只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 4、读方法: int b=raf.read()--》读一个字节 5、文件读写完成后一定要关闭 代码: file demo=new file(“demo”);//demo路径 if(!demo.exists()){ demo.mkdir();} File file= new file(demo,"raf.dat"); if(!file.exists()) file.creatNewFile(); RandomAccessFile raf= new RandomAccessFile (file,“rw”); raf.write('A'); raf.write('B'); System.out.print(raf.getFilePointer);//获取指针 //write一个整数 int i=10; raf.writeInt(i); //写一个字符串 String s="中"; byte[] gbk=s.getBytes(“gbk”); raf.write(gbk); //读文件,必须把指针移动头 raf.seek(0); //一次性读取 byte[] buf=new byte[(int)raf.length()]; raf.read(buf); System.out.print(Arrays.toString(buf)); raf.close();
    查看全部
  • utf-8 中文占用3个字节,英文占用一个字节 java双字节编码,指的是,utf-16be 中文占用2个字节,英文占用两个字节 gbk 中文占用2个字节, 英文占用1个字节
    查看全部
    1 采集 收起 来源:文件的编码

    2016-08-04

  • java.io.File类用于表示文件(目录)File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问。
    查看全部
  • String s="sadajka"; Byte[] byte1=s.getByte("utf-8");(gbk汉字两字节英文一个字节,utf-16be汉字字母均为两个字节) String str=new String(byte1,"utf-8");
    查看全部
    0 采集 收起 来源:文件的编码

    2018-03-22

  • RandomAccessFile java提供的对文件内容的读写访问,支持随机访问文件,可以访问文件的任意位置 (1)java 文件模型 在硬盘上的文件是byte存储的 ,是数据的集合 (2)打开文件 有两种模式 rw(读写) r(只读) RandomAccessFile raf-new RandomAccessFile(file "rw") 文件指针,打开文件时指针在开头 pointer=0 (3)写方法 raf write(int)--->之写一个字节(后8位)同事指针指向下一个位置,准备再次写入 (4)读方法 int b=raf.read()-->读一个字节 (5)文件读写完成之后一定要关闭
    查看全部

举报

0/150
提交
取消
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!