流操作:
1、明确数据源和数据目的(到底是输入还是输出流)
2、明确操作的是否是纯文本数据(用字符流还是字节流)
字节流:
FileInputStream、BufferInputStream
FileOutputStream、BufferOutPutStream
字符流:
FileReader、BufferedReader
FileWriter、BufferedWriter
转换流:
InputStreamReader:字节通向字符的桥梁
OutputStreamWriter:字符通向字节的桥梁
import java.io.*;
class StreamDemo
{
public static void main(String[] args) throws IOException
{
//copyJPG(); //复制图片
//systemInGen();
//systemInStream();
systemOutStream();
}
public static void copyJPG()
{
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
fis = new FileInputStream("Desert.jpg");
fos = new FileOutputStream("Desert复件.jpg");
byte [] ch = new byte[1024]; //
int num = 0; //读取一段数据,定义数组长度为1k.
while ((num = fis.read(ch)) != -1)
{
fos.write(ch,0,num);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
if (fos != null)
{
try
{
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
//键盘录入,用SringBuilder缓存.
public static void systemInGen() throws IOException
{
System.out.println('a'==97);
StringBuilder sb = new StringBuilder();
int ch = 0;
while (true)
{
InputStream in = System.in;
ch = in.read();
if (ch == '\r')
continue;
if (ch == '\n')
{
String s = sb.toString();
if ("over".equals(s))
return;
System.out.println(s.toUpperCase());
sb.delete(0, sb.length()); //清空缓存
}
else
sb.append((char)ch);
}
}
//键盘录入,用BufferedReader缓存
public static void systemInStream()
{
//可以利用System.setIn和setOut方法,重新分配输入输出流.
//InputStream in = System.in;
//InputStreamReader isr = new InputStreamReader(in); //转换流,将字节流转换为字符流
//BufferedReader bufr = new BufferedReader(isr);
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
try
{
String line = null; //读到的一行的数据
while ((line = bufr.readLine()) != null)
{
if ("over".equals(line))
{
return;
}
System.out.println(line.toUpperCase());
}
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
bufr.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
//1、通过键盘录入数据将数据打印到控制台 将PrintStrream(System.out)转换为BufferedWriter
//2、复制一个文本文件
//3、将键盘录入的数据存储到一个文件中.
//————三个操作,方法不变,变化的是原始文件和目标文件(输入流、输出流).
public static void systemOutStream()
{
BufferedWriter bufw = null;
BufferedReader bufr = null;
try
{
//将文件输出到控制台打印出来
//bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//bufr = new BufferedReader(new InputStreamReader(new FileInputStream("StreamDemo.java")));
//复制文件
bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
bufr = new BufferedReader(new InputStreamReader(new FileInputStream("StreamDemo.java")));
//将输入的文本存储到文本文件中.
//bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test.txt")));
//bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null; //读到的一行的数据
while ((line = bufr.readLine()) != null)
{
if ("over".equals(line))
{
return;
}
//三个操作,方法不变.
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
bufr.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
try
{
bufw.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
}