1.

Java IO

主要分为字节流(byte stream)

字符流          (characterstream)

实现这两种流的输入流与输出流分别是 InputStream OutputStream

、Reader Write。这四个类都是抽象类,所以只能被继承使用。

2.

与文件打交道肯定是要用到输入和输出流的,所以Java专门提供了读取文件数据的类FileInputStream,它继承了InputSteam属于字节流

要牢记其中的几个重要的方法:

读取文件的数据:

有三个read方法,其中最常用的是

int read(byte[] b,int off, int length)

其中 byte[] 用来存放文件中的数据信息,所以要有byte型数组;

int off 表示从那个字节开始读取数据;一般都从零开始;

int length 表示每次读取的长度,长度不能大于byte数组的长度;

另外,字节是不能被输出的,String类中提供了构造方法:

String (byte[] b, int off, int length ),就是将字节转换为字符;

看下面的程序:

当对一个流进行操作时,必须要有一下四部:

1.     打开流

2.     Boolean类型的语句 判断流中的信息还有没有

3.     对流进行读入或写出

4.     关闭流;

packagecom.jianjian.IO;

importjava.io.FileInputStream;

importjava.io.IOException;

public classFileTest9

{

public static void main(String[] args)throws IOException

{

FileInputStream file = new FileInputStream("F:/永建/个人数据/永建.txt");

byte[] b = new byte[100];

int length;

while (-1 != (length =file.read(b,0,100)))

{

String s = newString(b,0,length);

System.out.println(s);

}

file.close();

}

}

这个程序是很典型的,以后会用到很多,所以一定要牢记!

2.

Java中将集合转换为数组的方法 :

toArray(new array [length]);

将数组转换为集合的方法

asList(array) 返回list 列表;

3.

记得以前说过String类型是final类型的是不可变的类型,Java中存在可变的字符串类型 StringBuffer类型

4.

字节流中的两个重要的分支: 节点流、过滤流(filterInputStream);

字节流总是与源头打交道;

5.

输出流,OutputStream:

可以创建文件,并向文件中追加内容(FileOutputStream);

与输出流反过来的是,用户输入的是字符串,要转换成字节;String类中同样提供了方法String.byte(String[] b);

看下面的程序:

创建一个txt文件并将“helloworld !”写入文件:输出流

将文字从内部传到外部;不要混淆!

package com.jianjian.IO;

import java.io.FileOutputStream;

import java.io.IOException;

public class OutputStream

{

public static void main(String[] args)throws IOException

{

FileOutputStream file = new FileOutputStream("c:/test.txt");//创建一个新文件

String s = "helloworld!!";

byte[] b = s.getBytes();//将字符串转换成字节

file.write(b);//将字节写入文件;

file.close();//关闭流;

}

}

6.

BufferOutputStream: 缓冲区输出流

计算机中的缓冲区  

缓冲器为暂时置放输出或输入资料的内存。

  缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。

  缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。

与缓冲打交道的其实就是计算机的内存了,BufferdeOutputStream的作用其实就是包装 一个输出流类型的对象,它的构造方法是

BufferedOutputStream(OutputSteams)

那么这个类的作用到底是什么呢?

比如说如果像上面那样,只让单纯的输出字节,程序每次只能将一个字节读入到文件中去,如果有一百个字节,就要读一百次。如果加上缓存包装,就可以先将字节存储在内存中,待需要时一次性传入到文件或硬盘中,极大的提高了效率!!

看下面的程序:

好处在与大量数据交互时会得到体现

package com.jianjian.IO;

import java.io.BufferedOutputStream;

import java.io.FileOutputStream;

public class FileTest10

{

public static void main(String[] args)throws Exception

{

FileOutputStream file = new FileOutputStream("c:/jianjian.text");

BufferedOutputStream bz = new BufferedOutputStream(file);

bz.write("www.jianjian.com".getBytes());

bz.close();

}

}

7.

字节占八位

Int型占32位

8.

晕了:在输入流中的read方法返回的竟然是 字符!!!!

public int read();可是方法上明明写的是一个整型!!
是这样的,Java中的字符使用是用整型来表示的,只取后面的八位

package com.jianjian.IO;

public class FileTest11

{

public static void main(String[] args)

{

char a ='a';

int b = (int)a;

System.out.println(b);

}

}

打印出 97;

package com.jianjian.IO;

public class FileTest11

{

public static void main(String[] args)

{

char a= 'a';

System.out.println((int)a);

}

}

打印出97

package com.jianjian.IO;

public class FileTest11

{

public static void main(String[] args)

{

int a = 97;

System.out.println((char)a);

}

}

打印出a;

下面的程序将会非常有用:因为它会显示出各种字符所代表的整型值

package com.jianjian.IO;

public class FileTest11

{

public static void main(String[] args)

{

int a= 65;

System.out.println((char)a);

}

}

大写的A 65;

小写的a 97;

9.

下面讲 字节数组输出流 ByteArrayIntputSteam 类似于FileIntputStream 它是从字节数组中读取数据的;

它的构造方法接收一个字节型数组,表示操作的对象:

/*

* 将输入的字节数组中的字母,按大小写的形式,各输出一遍

*/

package com.jianjian.IO;

import java.io.ByteArrayInputStream;

import java.io.IOException;

public class FileeTest12

{

public static void main(String[] args)throws IOException

{

String s = "abcdefg";

byte[] b = s.getBytes();

ByteArrayInputStream array = new ByteArrayInputStream(b);

for(int i = 0 ; i < 2; i++)

{

if(i == 0)

{

for(int j = 0 ;j < s.length(); j ++)

{

System.out.println((char)(array.read()));

}

}

else

{

for(int k = 0 ; k < s.length(); k ++)

{

System.out.println(Character.toUpperCase((char)array.read()));//利用字符包装类来将字符变为大写

}

}

/*

* 我们也看到了read方法每执行一次都会指向下一个字节,要想实现我们的目标必须要将指针重新指向首字节!

* 不指向的话就是返回 -1,转换成字节后就是?????,开发人员果然很聪明!

* reset方法的作用就是使指针指向mark标记处,这里没有用到mark方法,表示从零开始!

*/

array.reset();

}

System.out.println();

array.close();

}

}

10.

当然也有所谓的字节数组输出流,即从内部将数据写入到字节数组当中!

ByteArrayOutputStream;

并且字节数组输出流中有一个方法

writeTo(OutputStream s)即将字节数组输出流中的字节数组直接写入到其他的输入流中,比如说文件输出流!

package com.jianjian.IO;

import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class FileTest13

{

public static void main(String[] args)throws IOException

{

String s = "hello worldwelcome";

byte[] b = s.getBytes();

ByteArrayOutputStream array = new ByteArrayOutputStream();

array.write(b);//到这里就将字节存储到字节数组输出流当中,再将其拿出来即可

byte[] bb = array.toByteArray();//该方法返回字节数组

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

{

System.out.println((char)bb[i]);

}

FileOutputStream file = new FileOutputStream("c:/really.txt");

array.writeTo(file);//将字节写入到文件中;

array.close();

file.close();

}

}

java学习笔记十二相关推荐

  1. 反射、Lambda表达式(Java学习笔记十二)

    文章目录 反射 Class 类 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 调用指定方法 调用指定属性 关于setAccessible方法的使用: 动态代理 Lambda表达式 ...

  2. java学习笔记(十二)----集合

    集合类 集合类用于存储一组对象,其中的每个对象称之为元素,经常会用以的有Vector,Enumeration,ArrayList,Collection,Iterator,Set,List等集合和接口 ...

  3. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  4. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  5. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  6. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  7. ROS学习笔记十二:使用roswtf

    ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...

  8. Polyworks脚本开发学习笔记(十二)-输出和读取文本文件

    Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...

  9. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

最新文章

  1. 计算机网络动画是什么软件,把动漫人头p人身上的软件叫什么 软件介绍
  2. P5431-[模板]乘法逆元2【递推】
  3. 后端在插入数据发现重复如何正确的弹出警告_前百度面试官整理的——Java后端面试题(一)...
  4. Simulink之负载换流式无源逆变电路
  5. 自学python买什么教材-学习Python的正确姿势—基础教学,教科书该怎么买?
  6. xshell简单使用
  7. 27. 安全 HTTP (2)
  8. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用...
  9. docx4j书签的妙用
  10. [IOS APP]婷婷诗教-有声系列
  11. pow函数php,PHP pow( )用法及代码示例
  12. 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
  13. 软件自动化测试的的设计标准和适用范围
  14. 小鸟云服务器如何进行远程桌面连接?
  15. java面试基础题整理(二)
  16. 【java删除指定文件夹或者文件】
  17. 解决cmd中,javac提示:javac不是内部或外部命令,但是运行java、java-version正常的问题
  18. 【蓝桥杯】历届试题 对局匹配(C++)
  19. 7种方法实现数组去重
  20. 【python】根据文件(图片)名字,删除符合条件的文件(图片)

热门文章

  1. 大华监控服务器显示感叹号灯亮,仪表盘出现黄色感叹号灯亮什么问题
  2. 无法想mysql进行插入_mysql 无法插入中文
  3. 在Linux中安装R语言包,遇到无法验证下列签名的错误
  4. Codeforces344_C(数学思维)
  5. 逆向工程核心原理读书笔记-API钩取之计算器显示中文数字
  6. 棋牌游戏服务器架构: 详细设计(一) 内核设计
  7. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
  8. Linux IO磁盘篇整理小记
  9. 音视频技术开发周刊 88期
  10. 探索多媒体开发最新最佳实践,我们在深圳等你