您的位置:首页 > 编程语言 > Java开发

Java基础--IO

2016-06-23 00:00 316 查看
摘要: IO流的基本操作

一、IO 概述

输入与输出:

输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

输出:将程序(内存)数据输出到磁盘、光盘等存储设备中

Java 的 IO 流主要包括输入、输出两种 IO 流,每种输入、输出流有可分为字节流和字符流两大类:

字节流以字节为单位来处理输入、输出操作

字符流以字符为单位来处理输入、输出操作

二、File 类

File 类代表与平台无关的文件和目录。
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。







三、IO 流体系



四、InputStream & Reader

InputStream 和 Reader 是所有输入流的基类。

1.InputStream(典型实现:FileInputStream)

int read()

int read(byte[] b)

int read(byte[] b, int off, int len)

2.Reader(典型实现:FileReader):

int read()

int read(char [] c)

int read(char [] c, int off, int len)

程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。

五、OutputStream & Writer

OutputStream 和 Writer 也非常相似:

void write(byte write/int c)

void []/char[] buff)

void write(byte[]/char[] buff, int off, int len);

因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数

void write(String str);

void write(String str, int off, int len)

六、 IO举例

import java.io.File;
import java.io.FileReader;

/**
* 字符输入流
*
*  Reader   抽象类
*  FileReader
*/
public class ReaderTest {
public static void main(String[] args) {
File file = new File("files\\text.txt");
//申明字符输入流
FileReader reader = null;
try {
//创建字符输入流
reader = new FileReader(file);
//缓冲区
char [] buff = new char[100];
for(int i = reader.read(buff);i!=-1;i = reader.read(buff)){
//将字符转换成字符串
String info = new String(buff,0,i);
System.out.print(info);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(reader!= null){
reader.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

import java.io.File;
import java.io.FileWriter;

/**
* 字符输出流
*
* Writer
* FileWriter
*/
public class WriterTest {
public static void main(String[] args) {
File file = new File("files\\noname.txt");
FileWriter writer = null;
try {
writer = new FileWriter(file);
String info ="古剑奇谭网络版什么时候开测啊!";
writer.write(info);//直接写出字符串
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(writer!=null){
writer.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
* 文件输入流     字节流
*
* FileInputStream
*/
public class InpuStreamTest {
public static void main(String[] args) {
File file = new File("files\\test.txt");

//申明输入流
FileInputStream in = null;
try {
//创建输入流      输入流管道连接到了指定的文件
in = new FileInputStream(file);
//创建缓冲区
byte [] buff = new byte[128];
//将数据读取到缓冲区中      read方法是将数据读取到指定的字节数组中,返回真实读取到的字节数.如果读到文件的末尾,会返回-1.
for(int i = in.read(buff);i!=-1;i = in.read(buff)){
//将读取的数据转变成字符串
String info = new String(buff,0,i);
System.out.print(info);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();
in = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 文件输出流
*
* FileOutputStream
*/
public class OutputStreamTes {

public static void main(String[] args) {
File file = new File("files\\igeek.txt");
//申明文件输出流
FileOutputStream out = null;
try {
//创建文件输出流
out = new FileOutputStream(file,true); //true表示写入到文件中不会覆盖前面的数据
String str = "古剑奇谭";
byte [] buff = str.getBytes();
out.write(buff);//写出缓冲区的数据
out.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
* 缓冲字符输入流
*
* BufferedReader
*/
public class BuffReaderTest {
public static void main(String[] args) {
File  file = new File("files\\test.txt");
FileReader reader = null;//申明字符流
BufferedReader bufReader = null;//申明缓冲字符流
try {
//创建字符流
reader = new FileReader(file);
//创建缓冲字符流
bufReader = new BufferedReader(reader);
//读取数据
//按行读取
for(String str = bufReader.readLine();str!=null;str = bufReader.readLine()){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(reader!=null)
reader.close();
if(bufReader!=null)
bufReader.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
* 缓冲字符输出流
*
* BufferedWriter
*/
public class BufferWriterTest {

public static void main(String[] args) {
File file = new File("files\\test.txt");
FileWriter  writer = null;
BufferedWriter bufWriter = null;
try {
//创建流
writer = new FileWriter(file);
bufWriter = new BufferedWriter(writer);
bufWriter.write("古剑奇谭");
bufWriter.newLine();
bufWriter.write("到底什么时候开测?");
bufWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(writer != null){
writer.close();
}
if(bufWriter!=null ){
bufWriter.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java IO