`
CoderGenuine
  • 浏览: 231 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

小强的练级之路

    博客分类:
  • IO
阅读更多

<!--[if !supportLists]-->一、<!--[endif]-->输入输出字节流

<!--[if !supportLists]-->1、<!--[endif]-->文件字节输入字节流

publicstaticvoid readByStream() throws Exception {

 

       File file = new File("D:/1.jpg");

       FileInputStream inputStream = new FileInputStream(file);

 

       byte buf[] = newbyte[1024];

       int len = 0;

 

       while ((len = inputStream.read(buf)) != -1) {

           System.out.print(new String(buf, 0, len));

       }

}

<!--[if !supportLists]-->2、<!--[endif]-->文件字节输出字符流

publicstaticvoid copyImg() throws IOException {

       // 读取图片

       File iFile = new File("f:/a.jpg");

       InputStream inputStream = new FileInputStream(iFile);

       // 拷贝

       File oFile = new File("d:/b.jpg");

       OutputStream outputStream = new FileOutputStream(oFile);

      

       byte[] buf = newbyte[1024];  //缓冲数组

       int len = 0;

 

       while((len = inputStream.read(buf)) != -1) {

           outputStream.write(buf, 0, len);

       }

}

<!--[if !supportLists]-->3、<!--[endif]-->拷贝图片案例

publicstaticvoid copyImg() throws IOException {

       // 读取图片

       File iFile = new File("f:/a.jpg");

       InputStream inputStream = new FileInputStream(iFile);

       // 拷贝

       File oFile = new File("d:/b.jpg");

       OutputStream outputStream = new FileOutputStream(oFile);

      

       byte[] buf = newbyte[1024];  //缓冲数组

       int len = 0;

 

       while((len = inputStream.read(buf)) != -1) {

           outputStream.write(buf, 0, len);

       }

}

二、文件异常处理方法

publicstaticvoid readFile(){

       FileInputStream fis = null;

       try{

           //创建文件

           File file = new File("e:/a.txt");

           //创建输入通道

           fis = new FileInputStream(file);

           //创建缓冲数组

           byte[] buf = newbyte[1024];

           int len = 0;

           //读取文件

           while((len = fis.read(buf)) != -1) {

              System.out.println(new String(buf,0,len));

           }

       }catch(IOException e) {

           //处理文件异常信息方式

           thrownew RuntimeException(e);

       }finally{

           if(fis != null) {

              try {

                  fis.close();

              } catch (IOException e) {

                  thrownew RuntimeException(e);

              }

           }

       }

}

<!--[if !supportLists]-->三、   <!--[endif]-->缓冲输入输出字节流

1、缓冲输入字节流

缓冲输入流:

     -----------|InputStream

     -------------------|FileInputStream

     -------------------|BufferedInputStream

     注意事项:1BufferedInputStream 关闭的时候会连带构造缓冲流时候传入的输入流一起关闭。

              2、缓冲流不是文件流!

              3、缓冲流实际上是内部创建一个大小为8K的缓冲数组。实际上效率不如自己手动创建一个缓冲数组。

 

2、缓冲输出字节流

缓冲输出流:

     -----------|OutputStream

     -------------------|FileOutputStream

     -------------------|BufferedOutputStream

     注意事项: BufferedOutputStream 实际上是输出到缓冲数组中,如果想让其输出到硬盘中两种方式:

               1、缓冲数组装满了,自动释放到硬盘。

               2、手动调用flush方法和close方法(内部先调用了flush方法)

 

3、案例拷贝图片

publicstaticvoid copyImage() throws IOException {

       //输入缓冲流的创建

       File iFile = new File("d:/1.jpg");

       FileInputStream fis = new FileInputStream(iFile);

       BufferedInputStream bis = new BufferedInputStream(fis);

       //输出缓冲流的创建

       File oFile = new File("f:/2.jpg");

        FileOutputStream fos = new FileOutputStream(oFile);

       BufferedOutputStream bos = new BufferedOutputStream(fos);

      

       //读写图片操作

       int content = 0;

       while((content = bis.read()) != -1) {

           bos.write(content);

       }

       bos.close();

       bis.close();

}

<!--[if !supportLists]-->四、   <!--[endif]-->输入输出字符流

<!--[if !supportLists]-->1、<!--[endif]-->输入字符流

/**

----------|Reader

-----------------|FileReader

    输入字符流:

       和字节流读取的过程非常类似。

 */

publicstaticvoid testReader() throws Exception {

       //目标文件

       File file = new File("f:/a.txt");

       //打开通道

       FileReader fr = new FileReader(file);

       //读取文件

       char[] buf = newchar[1024];

       int len = 0;

       while((len = fr.read(buf)) != -1) {

           System.out.println(new String(buf,0,len));

       }

       //关闭通道

       fr.close();

}

 

<!--[if !supportLists]-->2、<!--[endif]-->输出字符流

/**

----------|Writer

-----------------|FileWriter

    输出字符流:

       1.每次向文件写出内容的时候,都会首先清空文件的内容,如果想要追加需要在使用FileWriter(File,true);

       2.如果FileWriter没有关闭为什么程序内容写不出去。因为Writer类自己内部维护了一个存放数据的数组。

           a.当数组内容满了的时候可以被释放。

           b.close()或者flush()方法。

 */

publicstaticvoid testWriter() throws Exception {

       //目标文件

       File file = new File("f:/a.txt");

       //打开通道

       FileWriter fw = new FileWriter(file);

       //写出

       String data = "奋斗By小强";

       fw.write(data);

       //关闭通道

       fw.close();

}

案例一、拷贝一个.java文件

// 1、拷贝一个.java文件

    publicstaticvoid copyJavaFile() throws Exception {

 

       // 输入通道

       File iFile = new File("d:/Demo1.java");

       FileReader fr = new FileReader(iFile);

 

       // 输出通道

       File oFile = new File("f:/test.java");

       FileWriter fw = new FileWriter(oFile);

 

       // 读写操作

       char[] buf = newchar[1024];

       int len = 0;

       while ((len = fr.read(buf)) != -1) {

           fw.write(buf, 0, len);

       }

       // 关闭资源

       fw.close();

       fr.close();

    }

 

案例二、拷贝一个图片

为什么会出现拷贝的图片无法打开?

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="图片_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" style='width:415.5pt;height:179.25pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

总结、字节流和字符流的使用场景

何时使用字符流?如果操作文本数据,这时候应该使用字符流。

何时使用字节流?如果操作非文本数据,这时候应该使用字节流。(图片、视频、音频、word文档)

 

五、缓冲输入输出字符流

<!--[if !supportLists]-->1、<!--[endif]-->缓冲输入字符流

publicstaticvoid testBufferedReader() throws Exception {

       //目标文件

       File file = new File("d:/Demo1.java");

       //文件通道

       FileReader fr = new FileReader(file);

       //缓冲

       BufferedReader br = new BufferedReader(fr);

       //写入操作

       String line = null;

       while((line = br.readLine()) != null) {  //拓展的readLine方法。

           System.out.println(line);

       }

       //关闭资源

       br.close();

    }

 

<!--[if !supportLists]-->2、<!--[endif]-->缓冲输出字符流

publicstaticvoid testBufferedWriter() throws Exception {

       //目标文件

       File file = new File("f:/date.txt");

       //通道

       FileWriter fw = new FileWriter(file,true);

       //缓冲

       BufferedWriter bw = new BufferedWriter(fw);

       //写出操作

       String date = "哈哈,今天天气真好!~";

       bw.newLine();  //拓展方法

       bw.write(date);

       //关闭

       bw.close();

    }

六、序列流对象

/**

 电台:

       马丁·路德·金:不断努力,梦想无法实现。

      《时间长廊》:也许今天无法实现,明天也不能实现,但是最重要的是它在你心里,你永远有目标为之奋斗。

  --------------------|序列流

           需求一:合并两个文件

           需求二:合并两个以上的文件(VectorArrayList)

           需求三:切割一个MP3文件、再合并

 */

//需求一:合并两个文件

    publicstaticvoid merge1() throws Exception {

      

       File inFile1 = new File("f:/1.txt");

       File inFile2 = new File("f:/2.txt");

      

       FileOutputStream fos = new FileOutputStream(new File("f:/合并.txt"));

       FileInputStream fis1 = new FileInputStream(inFile1);

       FileInputStream fis2 = new FileInputStream(inFile2);

      

       SequenceInputStream sis = new SequenceInputStream(fis1, fis2);

      

       byte[] buf = newbyte[1024];

       int len = 0;

       while((len = sis.read(buf)) != -1) {

           fos.write(buf,0,len);

       }

       sis.close();

       fos.close();

    }

//需求二:合并两个以上的文件(Vector)

    publicstaticvoid merge2() throws Exception {

       File inFile1 = new File("f:/1.txt");

       File inFile2 = new File("f:/2.txt");

       File inFile3 = new File("f:/3.txt");

   

       FileOutputStream fos = new FileOutputStream(new File("f:/合并.txt"));

       FileInputStream fis1 = new FileInputStream(inFile1);

       FileInputStream fis2 = new FileInputStream(inFile2);

       FileInputStream fis3 = new FileInputStream(inFile3);

      

       Vector<FileInputStream> v = new Vector<FileInputStream>();

       v.add(fis1);

       v.add(fis2);

       v.add(fis3);

       Enumeration<FileInputStream> e = v.elements();

      

       SequenceInputStream sis = new SequenceInputStream(e);

      

       byte[] buf = newbyte[1024];

       int len = 0;

      

       while((len = sis.read(buf)) != -1) {

           fos.write(buf,0,len);

       }

       sis.close();

       fos.close();

    }

//需求二:合并两个以上的文件(ArrayList)

    publicstaticvoid merge3() throws Exception {

       File inFile1 = new File("f:/1.txt");

       File inFile2 = new File("f:/2.txt");

       File inFile3 = new File("f:/3.txt");

   

       FileOutputStream fos = new FileOutputStream(new File("f:/合并.txt"));

       FileInputStream fis1 = new FileInputStream(inFile1);

       FileInputStream fis2 = new FileInputStream(inFile2);

       FileInputStream fis3 = new FileInputStream(inFile3);

      

       List<FileInputStream> list = new ArrayList<FileInputStream>();

       list.add(fis1);

       list.add(fis2);

       list.add(fis3);

       final Iterator<FileInputStream> it = list.iterator();

       //匿名内部类

       SequenceInputStream sis = new SequenceInputStream(new Enumeration<FileInputStream>() {

 

           publicboolean hasMoreElements() {

              return it.hasNext();

           }

 

           public FileInputStream nextElement() {

              return it.next();

           }

       });

      

       byte[] buf = newbyte[1024];

       int len = 0;

      

       while((len = sis.read(buf)) != -1) {

           fos.write(buf,0,len);

       }

       sis.close();

       fos.close();

    }

    //需求三:切割一个MP3文件

    publicstaticvoid merge4() throws Exception {

       //1.找到目标文件

        File file = new File("F:/a.mp3");

       //2.创建文件通道

       FileInputStream fis = new FileInputStream(file);

      

       byte[] buf = newbyte[1024*1024*3];

       int len = 0;

       int count = 1;

       FileOutputStream fos = null;

       while((len = fis.read(buf)) != -1) {

           fos = new FileOutputStream(new File("F:/music/"+ count + ".mp3"));

           fos.write(buf,0,len);

           count++;

           fos.close();

       }

       fis.close();

    }

//需求三:合并

    publicstaticvoid merge5() throws Exception {

       File file = new File("F:/music");

       File[] listFiles = file.listFiles();

      

       File outFile = new File("F:/合并.mp3");

       FileOutputStream fos = new FileOutputStream(outFile);

      

       Vector<FileInputStream> v = new Vector<FileInputStream>();

   

       for(int i=0; i<listFiles.length; i++) {

           if(listFiles[i].getName().endsWith(".mp3")) {

              v.add(new FileInputStream(listFiles[i]));

           }

       }

       Enumeration<FileInputStream> e = v.elements();

      

       SequenceInputStream sis = new SequenceInputStream(e);

      

       byte[] buf = newbyte[1024];

       int len = 0;

      

       while((len = sis.read(buf)) != -1) {

           fos.write(buf,0,len);

       }

       sis.close();

       fos.close();

    }

 

七、对象的输入输出流。

/**

    1、序列化(ObjectOutputStream):把一个对象信息写到硬盘上 

    2、反序列化(ObjectInputStream):把硬盘上的一个对象信息读取到程序中

 

    注意点:

        1、想要序列化的对象要实现Serializeable接口,Serializeable接口是一个标识接口,没有方法。

        2、反序列化是否调用对象的构造器?

            答案是否定的。

            因为我们把对象写到文件上的时候,文件除了记录class的版本号(SerialVersionUID)。

            JVM本地匹配版本号,有相同的则创建对象。

        3、当我们序列化一个对象之后改动了该对象的成员变量,还能否完成反序列化。

            不能。

            因为我们把对象写到文件上的时候,文件除了记录class的版本号(SerialVersionUID

            版本号 = 类名 + 包名 + 工程名 + 成员一起算出的id

            在反序列化的时候,jvm会使用本地class文件算出一个id号与文件记录的id号进行对比,如果不一致。反序列化失败。

        4、如果有可能改动class文件的时候,那么我们可以指定SerialVersionUID

        5transient可以保证该成员变量透明,当序列化的时候不参与序列化过程。

 

 */

class User implements Serializable{

   

    privateintid;

    private String name;

   

    public User(int id, String name) {

       super();

       this.id = id;

       this.name = name;

    }

    public User() {

       super();

    }

    @Override

    public String toString() {

       return"User [id=" + id + ", name=" + name + "]";

    }

   

   

}

publicclass Demo {

   

    publicstaticvoid main(String[] args) throws Exception {

//     writerObj();

       readObj();

    }

   

    publicstaticvoid readObj() throws Exception {

      

       File file = new File("f:/obj.txt");

      

       FileInputStream fis = new FileInputStream(file);

      

       ObjectInputStream ois = new ObjectInputStream(fis);

      

       User user = (User) ois.readObject();

      

       System.out.println(user);

    }

   

    publicstaticvoid writerObj() throws Exception {

      

       File file = new File("F:/obj.txt");

      

       FileOutputStream fos = new FileOutputStream(file);

      

       ObjectOutputStream oos = new ObjectOutputStream(fos);

      

       User user = new User(1,"genuine");

      

       oos.writeObject(user);

      

       oos.close();

    }

 

}

八、转换流

1、输入字节流的转换流

//  InputStreamReader : 输入字节流的转换流:

privatestaticvoid testInputStreamReader() throws IOException {

       InputStream in = System.in;

      

       InputStreamReader isr = new InputStreamReader(in);

      

       BufferedReader br = new BufferedReader(isr);

 

       String line = null;

      

       while((line = br.readLine()) != null) {

           System.out.println(line);

       }

}

2、输出字节流的转换流

//  OutputStreamWriter : 输出字节流的转换流

privatestaticvoid testOutputStreamWriter() throws IOException {

      

       FileOutputStream fos = new FileOutputStream(new File("f:/a.txt"));

      

       OutputStreamWriter osw = new OutputStreamWriter(fos);

      

       String data = "中国-广州";

      

       osw.write(data);

       osw.close();

}

九、输出流

/*

       PrintStream ps = new PrintStream(new File("f:/a.txt"));

      

       ps.print(3.123);

       ps.close();

*/

   

      

/*    

        //想要打印文件追加的方法:

       FileOutputStream fos = new FileOutputStream(new File("f:/a.txt"),true);

       PrintStream ps = new PrintStream(fos);

      

       try{

//         int a = 2/0;

           String str = null;

           System.out.println("字符个数"+str.length());

       }catch(Exception e) {

           e.printStackTrace(ps);

       }

*/

   

      

/*     //修改标准输出流

       PrintStream ps = new PrintStream(new File("f:/a.txt"));

       System.setOut(ps);

       System.out.println("修改标准输出流");

*/

 

 

 

 

 

分享到:
评论

相关推荐

    小强多个模版替换

    "小强多个模版替换"工具正是为了提升这种效率而设计的。它允许用户预先设定多个模板,然后快速地对这些模板进行内容替换,以适应不同的发布需求。这样的功能广泛应用于电子邮件、报告、公告、社交媒体更新等场景,...

    小强破解软件工具

    破解工具 把别人的工具改成自己的工具 哈哈哈开始邪恶把

    小强机器人

    用户只需在设备上启用未知来源的应用安装,然后按照常规步骤进行安装,即可开始与"小强机器人"的互动之旅。 总的来说,"小强机器人"是一个集成了多种智能特性的聊天应用,它通过不断学习和记忆提升用户体验,同时...

    小强多模版

    "小强多模版"是一款高效实用的工具,专为编辑和推广人员设计,旨在提升内容创作和关键词管理的效率。这款工具的核心功能是“关键词一键插入”和“复制工具”,使得在撰写文章或者进行网络营销时,能够快速、准确地将...

    百变小强的程序.zip

    "百变小强的程序.zip"这个压缩包文件可能包含的是与"百变小强"相关的编程项目或教程,可能是为了帮助用户理解或操作与"百变小强"这一主题有关的软件或硬件设备。"百变小强"通常在IT行业中可能指的是一个具有多种功能...

    小强PDF工具包中文免费版集

    小强PDF工具包是一款专为中文用户设计的全方位PDF处理软件,它集合了PDF阅读、编辑、管理和创建等多种功能,旨在提供一个便捷、高效的PDF解决方案。在这个免费版本中,用户可以享受到一系列实用的功能,无需支付任何...

    百业信息发布 小强多个模版替换

    在IT行业中,"百业信息发布 小强多个模版替换"这一主题涉及到的是软件开发中的模板引擎技术和自动化信息发布系统。小强多个模版替换是指在软件应用中,使用多个不同的模板来适应各种信息发布的需要,这通常是为了...

    小强开发板原理图版本

    ### 小强开发板原理图版本相关知识点 #### 一、概述 小强开发板是一种基于ATMEGA8515/S52_DIP40微控制器的开发平台,广泛应用于教学与项目实践中。该开发板提供了丰富的外设接口,便于进行各种硬件扩展。本次解析...

    小强影音盒1.0

    小强影音盒是一个在线电影和视频播放器,能播放网上的海量电影。如果想看最新版本到:http://www.5aie.com/xiaoqiangplayer/flvshuoming.htm 查看。

    小强通话时间统计

    小强通话时间统计,显示归属地,统计指定号码通话时间

    小强一号机器人制作过程

    在本文中,我们将探讨如何制作一款名为“小强一号”的基础机器人,这是一份非常适合初学者的机器人制作教程。首先,我们了解到制作机器人通常需要处理数据采集和电机控制两大核心问题。传统的个人电脑虽然功能强大,...

    小强升职记 实现目标思维导图

    小强升职记 实现目标思维导图

    GTD精典读物:小强升职记

    - 缺乏这些技能的人,则常常处于忙乱之中,长时间加班却效果不佳。 #### 五、时间管理的三个层次 - 书中提出了时间管理的三个层次:“集中精力工作”、“无意义浪费时间”、“真正的休息”。这三个层次有助于读者...

    小强开发板单片机程序

    【小强开发板单片机程序】是一款专为初学者设计的编程资源,它包含了针对小强开发板的51系列单片机的基础程序。这个压缩包是学习单片机编程的理想起点,尤其是对于那些刚接触这个领域的学习者来说,能够提供宝贵的...

    小强ASP解密工具.rar

    "小强ASP解密工具"是一种专门针对ASP源代码加密与解密的软件工具。在网络安全日益重要的今天,源代码加密对于保护开发者知识产权、防止恶意篡改或盗窃代码至关重要。该工具可能采用了特定的算法对ASP代码进行加密,...

    小强老师《零基础学习软件测试》系列视频之QTP使用指南2——界面分析

    小强老师《零基础学习软件测试》系列视频之QTP使用指南——界面分析

    小强老师《零基础学习软件测试》系列视频之QTP使用指南——目录分析

    小强老师《零基础学习软件测试》系列视频之QTP使用指南

    小强老师《零基础学习软件测试》系列视频之QTP使用指南3——示例程序分析

    小强老师《零基础学习软件测试》系列视频之QTP使用指南

Global site tag (gtag.js) - Google Analytics