黑马程序员---------Java基础知识:IO流
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
IO流时一个很重要的部分,它可以对文件,图片等做处理,可以复制,移动文件,可以通过键盘输入,再把数据存储到文档当中,总之用处很大。
先说说一些知识点。
InputStream:是表示字节输入流的所有类的超类。
FileInputStream:从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。但是如果需要炒作文档一类的数据时,使用 FileReader,但是FileReader不能使用在图片和音频等上面,因为在操作过程中会发生数据变化,导致最后文档不可用。
FileInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
BufferedInputStream:该类实现缓冲的输入流,这个是一个缓冲器。
OutputStream:此抽象类是表示输出字节流的所有类的超类。
FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
字节流复制文件演示例程:
importjava.io.*; //导入包
publicclass CopyMovieTest {
publicstatic void main(String[] args) throws IOException //如果不做处理则抛出异常
{
copyDemo();
}
privatestatic void copyDemo() throws IOException {//如果不做处理则抛出异常
BufferedInputStreamin = new BufferedInputStream(new FileInputStream("F:\\Test1.java"));//源
BufferedOutputStreamout = new BufferedOutputStream(new FileOutputStream("D:\\Test1.java"));//目的
byte[]buf = new byte[1024];//定义缓冲区的大小
intlen = 0;
while((len = in.read(buf)) !=-1){
out.write(buf,0,len);//写数据
out.flush();//刷新
}
in.close();//关流
out.close();
-------------------------------------------------
转换流:
InputStreamReader:字节流转成字符流的桥梁。(可以通过指定的编码表将字节数据解码成对应字符)
OutputStreamWriter:字符流转成字节流的桥梁。(可以通过指定的编码表将字符编码成对应的字节数据并写入目的中)
转换流特有功能:转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。
转换流练习:
1、使用转换流来完成键盘录入的数据打印在控制台上:
import java.io.*;
public class Demo002 {
public static void main(String[] args) throws IOException
{
BufferedReader fr = new BufferedReader(new InputStreamReader(System.in));//确定输入为键盘输入
BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(System.out));//输出在控制台
String line = null;
while((line = fr.readLine()) !=null)
{
if("over".equals(line))//当键盘输入OVER则结束
break;
fw.write(line.toUpperCase());
fw.newLine();
fw.flush();
}
fw.close();//关流,一定要养成好习惯做完操作后关流
fr.close();
}
}
2、将键盘录入的数据写到一个文件中。
import java.io.*;
public class KeyReadDemo {
public static void main(String[] args) throws IOException
{
demo();
}
public static void demo() throws IOException
{
BufferedReader fr = new BufferedReader(new InputStreamReader(System.in));//源,键盘输入
BufferedWriter fw = new BufferedWriter(new FileWriter("f:\\keydemo.txt"));//目的,f:\\keydemo.txt文件
String line = null;
while((line = fr.readLine()) != null)
{
String str = line;
if("over".equals(str))//还是OVER结束
break;
fw.write(line);
fw.newLine();//这个必须要换行,否则出来的东西没法看
fw.flush();//记得及时刷新
}
fr.close();
fw.close();
}
}
假如想要把一个文件打印在控制台上,只需要把源指向文件,目的指向控制台即可。流的操作有一些规律可循。在写代码之前需要先弄清楚以下几个问题。
1.明确源和目的:
2.明确数据是否是纯文本数据。
3.明确具体的设备。
4.是否需要其他额外功能:
清楚了这几个问题,基本上就可以确定用什么流来操作。该怎么操作。流着部分说难不难说简单也不简单,就看个人对流的熟悉程度了。