黑马程序员——IO流
来源:互联网 发布:美工师 编辑:程序博客网 时间:2024/04/28 06:01
---------------------- android培训、java培训、期待与您交流! ----------------------
java IO流
java.io包定义了多个流类型来实现输入、输出功能;
输入流、输出流 字节流(8位)、字符流(16位) 节点流、处理流
对文件进行操作,从文件读出来,写进文件里去。
输入流、字节流:InputStream 字符流:Reader
输出流、字节流:OutputStream 字符流:Writer
节点流直接从数据源(文件、内存)读写数据
处理流连接在已存在的流之上实现更为强大的读写功能。
InputStream (输入字节流)基本方法
int read() throws IOException //-1已到输入流的末尾
int read(byte[] buffer) throws IOException //存储到一个数组buffer
void close() throws IOException //关闭流释放内存资源
OutputStream (输出字节流)基本方法
void write(int b) throws IOException
void write(byte[] b) throws IOException
void close() throws IOException
void flush()throws IOException //将输出流中缓冲的数据全部写出到目的地
Reader 基本方法与InputStream相同
Writer 基本方法与OutputStream基本相同
void Write(String str) throws IOException //将一个字符串写进去
void Write(char[] c) throws IOException
节点流类型
File(文件) FileReader、FileWriter、FileInputStream、FileOutputStream
Memory Array
Memory String
Pipe(管道)
例:
实现文件复制功能。
import java.io.*;
public class TestFileOutputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;//输入流
FileOutputStream out = null;//输出流
try {
in = new FileInputStream("d:/share/java/HelloWorld.java");//从文件读
out = new FileOutputStream("d:/share/java/io/HW.java");//写文件里
while((b=in.read())!=-1){//从in对象读出来,read()方法返回int类型,不等于-1就继续。
out.write(b);//写进out对象里
}
in.close();
out.close();
System.out.println("文件已复制");
} catch (FileNotFoundException e2) {
System.out.println("找不到指定文件"); System.exit(-1);
} catch (IOException e1) {
System.out.println("文件复制错误"); System.exit(-1);
}
}
}
例:
练习FileReader从文件读取数据。
import java.io.*;
public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null; //输入、字符流
int c = 0;
try {
fr = new FileReader("d:\\share\\java\\io\\TestFileReader.java");//从文件读取
int ln = 0;
while ((c = fr.read()) != -1) {//不等于-1就继续读取。
//char ch = (char) fr.read();
System.out.print((char)c);//转换为字符输出。
//if (++ln >= 100) { System.out.println(); ln = 0;}
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("文件读取错误");
}
}
}
例:
练习FileWriter写入数据到文件里。
import java.io.*;
public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d:\\bak\\unicode.dat");//写入文件里,如果文件不存在,会自动建立。(不会建立目录)
for(int c=0;c<=50000;c++){//char最大数为65535
fw.write(c);//写入的是字符
}
fw.close();
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}
}
处理流类型
Buffering(缓冲流): 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率。
BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
例1:
import java.io.*;
public class TestBufferStream1 {
public static void main(String[] args) {
try {
FileInputStream fis =
new FileInputStream("d:\\share\\java\\HelloWorld.java");//从文件读取
BufferedInputStream bis =
new BufferedInputStream(fis);//套接缓冲流读取,具有缓冲功能
int c = 0;
System.out.println(bis.read());
System.out.println(bis.read());
bis.mark(100); //做个标记,从第100个开始读取
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");
}
System.out.println();
bis.reset(); //回到标记点读取
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");
}
bis.close();
} catch (IOException e) {e.printStackTrace();}
}
}
例2:
import java.io.*;
public class TestBufferStream2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));//写入文件里去
BufferedReader br = new BufferedReader(
new FileReader("d:\\share\\java\\dat2.txt"));//从文件读取
String s = null;
for(int i=1;i<=100;i++){
s = String.valueOf(Math.random());//产生0-1随机数
bw.write(s);//写入到bw对象里去
bw.newLine();//换行
}
bw.flush();//清空
while((s=br.readLine())!=null){//整行读取,专属于 BufferedReader 类里
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) { e.printStackTrace();}
}
}
Converting between
bytes and character(转换流):把字节流转换为字符流。
InputStreamReader、OutputStreamWriter
例1
import java.io.*;
public class TestTransForm1 {
public static void main(String[] args) {
try {
OutputStreamWriter osw = new OutputStreamWriter(//字节流转换为字符流,又套接一层
new FileOutputStream("d:\\bak\\char.txt"));
osw.write("mircosoftibmsunapplehp");
System.out.println(osw.getEncoding());//输出字符编码
osw.close();
osw = new OutputStreamWriter(
new FileOutputStream("d:\\bak\\char.txt", true),"ISO8859_1"); //true代表追加。iso8859-1又称 latin-1
osw.write("mircosoftibmsunapplehp");
System.out.println(osw.getEncoding());
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
例2:
import java.io.*;
public class TestTransForm2 {
public static void main(String args[]) {
InputStreamReader isr =
new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null;
try {
s = br.readLine();
while(s!=null){
if(s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
s = br.readLine();
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
数据流
DataInputStream、DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:int、double等)的方法。
import java.io.*;
public class TestDataStream {
public static void main(String[] args) {
ByteArrayOutputStream baos =
new ByteArrayOutputStream(); //字节数组流
DataOutputStream dos =
new DataOutputStream(baos);//数据输出流
try {
dos.writeDouble(Math.random());//写入double类型随机数,占8个字节
dos.writeBoolean(true); //写入boolean类型,占1个字节
ByteArrayInputStream bais =
new ByteArrayInputStream(baos.toByteArray());//读出字节数组流
System.out.println(bais.available());//总共9个字节
DataInputStream dis = new DataInputStream(bais);数据输入流
System.out.println(dis.readDouble());//读出随机数,先存先读
System.out.println(dis.readBoolean());//读出布尔值
dos.close(); dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出流
PrintWriter、PrintStream都属于输出流,分别针对字符和字节。打印到文件里。
例1:
import java.io.*;
public class TestPrintStream1 {
public static void main(String[] args) {
PrintStream ps = null;
try {
FileOutputStream fos =
new FileOutputStream("d:\\bak\\log.dat");
ps = new PrintStream(fos);
} catch (IOException e) {
e.printStackTrace();
}
if(ps != null){
System.setOut(ps);//设置输出目标对象为ps
}
int ln = 0;
for(char c = 0; c <= 60000; c++){
System.out.print(c+ " ");
if(ln++ >=100){ System.out.println(); ln = 0;}//输出到ps文件里
}
}
}
例2:
从窗口往里输入,然后自动打印到log日志里。
import java.util.*;
import java.io.*;
public class TestPrintStream3 {
public static void main(String[] args) {
String s = null;
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
try {
FileWriter fw = new FileWriter
("d:\\bak\\logfile.log", true); //Log4J
PrintWriter log = new PrintWriter(fw);
while ((s = br.readLine())!=null) {
if(s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
log.println("-----");
log.println(s.toUpperCase());
log.flush();
}
log.println("==="+new Date()+"===");
log.flush();
log.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Object流
直接将Object写入或读出
ObjectOutputStream、ObjectInputStream
例:
import java.io.*;
public class TestObjectIO {
public static void main(String args[]) throws Exception {
T t = new T();
t.k = 8;
//写入文件里
FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);//直接把object对象t写入文件里
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReaded = (T)ois.readObject();//把内容读出来
System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
}
}
class T
implements Serializable//类可以序列化,就是可以直接的把object转换为字节流,写入到硬盘上。
{
int i = 10;
int j = 9;
double d = 2.3;
transient int k = 15;//transient 透明的 序列化时不予考虑
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO
- 黑马程序员———IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——java IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- sdibt 1012
- TOMCAT如何设置支持apk下载
- Maven常用命令
- cin>>i的返回值的问题
- 怎样用USB安装windows 8
- 黑马程序员——IO流
- shl,shr 移位处理字模提取的数据
- Android之ListActivity:布局与多种数据绑定
- 如何设置输入特定域名访问指定的项目主页(tomcat)
- oracle 遍历树
- 假期就这样错过了
- 黑马程序员--学习--网络1
- 黑马程序员——反射
- 黑马程序员--学习--网络2