------- android培训、java培训、期待与您交流! ----------
字节流InputStream和OutputStream
字节流的三种读取方法:
import java.io.*;
public class StreamDemo
{
public static void main(String[] args) throws IOException
{
//writeFile();
readFile1();
readFile2();
readFile3();
}
//FileOutputStream写
public static void writeFile() throws IOException
{
FileOutputStream fos=new FileOutputStream("a.jpg");
fos.write("dgksryopewrjg;eglg".getBytes());
fos.close();//字节读取操作不用刷新
}
//FileInputStream读
//第一种方法,一个一个读 int i
public static void readFile1() throws IOException
{
FileInputStream fis=new FileInputStream("a.jpg");
int i=0;//一个一个读
while((i=fis.read())!=-1)
{
System.out.print((char)i);
}
fis.close();
}
//第二种方法,字节数组读byte[]
public static void readFile2() throws IOException
{
FileInputStream fis=new FileInputStream("a.jpg");
byte[] ch=new byte[1024];
int num=0;
while((num=fis.read(ch))!=-1)
{
System.out.println(new String(ch,0,num));
}
fis.close();
}
//第三种方法,available() 不建议用,因为如果文件很大时会一下创建一个很大的字节数组。
public static void readFile3() throws IOException
{
FileInputStream fis=new FileInputStream("a.jpg");
int num=fis.available();
byte[] ch=new byte[num];
fis.read(ch);
System.out.println(new String(ch));
fis.close();
}
}
练习
* 复制一个图片
import java.io.*;
public class CopyPic
{
public static void main(String[] args)
{
FileOutputStream fos=null;
FileInputStream fis=null;
try
{
fos=new FileOutputStream("D:\\a.jpg");
fis=new FileInputStream("a.jpg");
byte [] bu=new byte[1024];
int len=0;
while((len=fis.read(bu))!=-1)
{
fos.write(bu, 0, len);
}
}
catch(IOException e)
{
System.out.println("");
}
finally
{
try
{
if(fis!=null)
{
fis.close();
}
}
catch(IOException e)
{
System.out.println("");
}
try
{
if(fos!=null)
{
fos.close();
}
}
catch(IOException e)
{
System.out.println("");
}
}
}
}
缓冲区的应用
/*
* 复制一个媒体文件
* 提高效率*/
缓冲区的应用
/*
* 复制一个媒体文件
* 提高效率*/
public class CopyMedia
{
public static void main(String[] args)
{
long a=System.currentTimeMillis();
copy();
long b=System.currentTimeMillis();
System.out.print(b-a);
}
public static void copy()
{
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
try
{
bis=new BufferedInputStream(new FileInputStream("C:\\Users\\dell\\Music\\My Body is a Metronome.MP3"));
bos=new BufferedOutputStream(new FileOutputStream("C:\\Users\\dell\\Desktop\\My Body is a Metronome.MP3"));
byte[] bu=new byte[1024];
int len=0;
while((len=bis.read(bu))!=-1)//这要传入数组啊 不传怎么存!!!
{
bos.write(bu,0,len);
}
}
catch(IOException e)
{
System.out.print("");
}
finally
{
try
{
if(bis!=null)
bis.close();
}
catch(IOException e)
{
System.out.print("");
}
try
{
if(bos!=null)
bos.close();
}
catch(IOException e)
{
System.out.print("");
}
}
}
}
字节流转换成字符流InputStreamReader和OutputStreamWriter
/*选择使用的对象
* 要明确
* 1,源和目的
* 2,是否是纯文本
* 读取键盘录入
* 打印到控制台*/
字节流转换成字符流InputStreamReader和OutputStreamWriter
选择使用的对象
* 要明确
* 1,源和目的
* 2,是否是纯文本
* 读取键盘录入
* 打印到控制台
import java.io.*;
public class ReadIn
{
public static void main(String[] args)
{
BufferedReader br=null;
BufferedWriter bw=null;
try
{
//改变传入的源对象和目的对象可以实现读取键盘到控制台,读取键盘到文件,读取文件到控制台,复制文件。
br=new BufferedReader(new InputStreamReader(System.in));//常用标准读取键盘录入写法
bw=new BufferedWriter(new OutputStreamWriter(System.out));//常用打印到控制台写法
String line=null;
while((line=br.readLine())!=null)
{
if(line.equals("over"))
break;
bw.write(line);
bw.newLine();
bw.flush();
}
}
catch(IOException e)
{
}
finally
{
try
{
if(br!=null)
br.close();
}
catch(IOException e)
{}
}
}
}
其他
import java.io.*;
import java.text.*;
import java.util.*;
public class LogDemo
{
public static void main(String[] args) throws IOException
{
//获取系统属性
Properties pr=System.getProperties();
pr.list(new PrintStream("SystemInfo.txt"));//属性对象的list功能可以直接输出系统属性到流
//创建异常日志
try
{
char[] arr=new char[3];
System.out.println(arr[4]);
}
catch(Exception e)
{
//添加时间
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
PrintStream ps=new PrintStream("daily.log");
ps.println(s);
//或者用System.setOut(ps);指定输出文件后 再e.printStackTrace(System.out);
e.printStackTrace(ps);//创建日志文件
}
}
}