黑马程序员——Java的IO流小结
来源:互联网 发布:厦门网络大学 编辑:程序博客网 时间:2024/06/05 00:46
---------------------- android培训、java培训、期待与您交流! ----------------------
当java程序需要从数据源读取数据时,我们就需要一个流来连接想要的数据用来读取,想输出数据时则还需要一个流来写。IO流分为字节流和字符流,字节流由InputStream和OutputStream处理,而字符流由Reader和Writer处理。数据可能来自文件,内存或者网路。
字符流的概述,所有的字符流操作类都继承自Reader或者Writer这两个抽象类。
输入流:CharArrayReader: 从内存中的字符数组中读入数据,以对数据进行流式读取。
StringReader:从内存中的字符串读入数据,以对数据进行流式读取。
FileReader:从文件中读入数据。注意这里读入数据时会根据JVM的默认编码对数据进行内转换,而不能指定使用的编码
输出流:CharArrayWriter:把内存中的字符数组写入输出流,输出流的缓冲区会自动增加大小。输出流的数据可以通过一些方法重新获取。
StringWriter: 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。
FileWriter:把数据写入文件。
为了提高IO流对数据的读写效率,在流的基础上增强流的功能,就出现了字符流缓冲区,在创建缓冲区之前必须要先有流对象。相对应的类BufferedReader和BufferedWrite。
FileWrite fw=new FileWrite("1.txt")
BufferedWrite bw=new BufferedWrite(fw);
将流对象传递给一个缓冲区构造函数即可。而且只要使用缓冲区一定要记得刷新,关闭缓冲区时也会同时关闭流对象。这里提供了一个换行方法叫做newLine().输入一个换行符。
文件读取流的缓冲区定义方法。
FileReader fr=new FileReader("1.txt");
BufferedReader br=new BufferedReader(fr);
readLine()方法是用于读取一行的数据并返回一个String类型的数据,而且只返回有效数据不返回行终止符,当读到末尾时返回null;
这里讲述了一种设计模式:装饰设计模式,当一个类对象需要升级时,不再修改源代码,而是定义一个类通过构造方法接收被装饰的对象(原类对象),基于原来的功能提供增强的功能。避免了继承的臃肿并且给予更强大的功能。
字节流,字节流读写操作类都继承自InputStream和OutputStream。
InputStream:read()从输入流读取下一个数据字节。返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。
OutputStream:write(int b)将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。
字节流同样使用了缓冲区
FileOutputStream fos=new FileOutputStream("1.txt");
BufferedOutputStream bufos=new BufferedOutputStream(fos);
FileInputStream fis=new FileInputStream("1.txt");
BufferedInputStream bufis=new BufferedInputStream(fis);
字节流通向字符流的桥梁就是读写转换流,利用缓冲区定义读写转换流BufferedReader br=new BufferedReader(new InputStreamReade(System.in))
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(Sysmte,out))
通过字节流复制文件
class CopyPic
{
public static void main(String[] args)
{
FileOutputStream fos =null;//定义写入流
FileInputStream fis =null;//定义读取流
try
{ //为两个流连接对象
fis = new FileInputStream("d:\\5.jpg");
fos = new FileOutputStream("d:\\7.jpg");
byte[] buf =new byte[1024];//定义一个数组作为缓冲区接收数据
int len =0;
while((len=fis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
System.out.println("复制文件失败");
}
finally
{ //由于关闭两个流的操作可能引发IO异常,所以每个close方法都单独进行一次异常处理
try
{
if (fis!=null)
fis.close();
}
catch (IOException e)
{
System.out.println("读取失败");
}
try
{
if (fos!=null)
fos.close();
}
catch (IOException e)
{
System.out.println("写入失败");
}
}
}
}
- 黑马程序员——Java的IO流小结
- 黑马程序员-java中io流小结
- 黑马程序员--Java中IO流小结
- 黑马程序员-Java关于IO流的小结
- 黑马程序员——IO小结
- 黑马程序员——java-IO流中复制单击目录以及使用递归的方式复制多级目录小结
- 黑马程序员------IO流小结
- 黑马程序员---IO流小结
- 黑马程序员——java IO流
- 黑马程序员—java—IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java IO流
- 黑马程序员——java-IO流
- 黑马程序员java学习—IO流
- 黑马程序员—Java中的IO流
- 黑马程序员——Java的IO流学习
- 黑马程序员----------------Java基础-----------------IO流学习小结
- 黑马程序员----JAVA----IO小结(1)
- & 变成 &
- java常用类(1)
- 地址
- HDOJ1010(搜索+剪枝)
- C# 设计模式之 装饰模式
- 黑马程序员——Java的IO流小结
- Flex3学习轨迹:ToolTipManager来进行工具提示的启用和禁用
- NS2及常用辅助工具的简介
- 从事产品设计应订阅的13个团队博客
- 掌握设计模式
- Javascript验证Textarea中是否有值
- 多线程Thread
- 抓包函数分析
- KeyValueTextInputFormat 重写