java入门 -- Java I/O (二) 输入流(文件读取)

说明:参考代码部分的时候,请忽略异常处理语句。I/O中异常的有效处理办法请看【I/O异常处理】章节

/*

* File类:

* 描述一个文件或是文件夹,通过File的实例对象可读取文件或是文件夹的的属性数据

* 如果需要操作文件的内容,那么就需要使用IO流技术

*

* IO(Input / Output流技术:

* 作用:在不同的设备之间传输数据

* -- 硬盘数据读取到内存

* -- 键盘数据读取到内存中

* -- 将内存数据写到硬盘中

*

* 应用场景:

* -- 报表导入

* -- 上传图片

* -- 数据下载

*

* IO流分类:

* - 按照数据的流向划分(以内存为参照物):

* --- 输入流(从其他设备读数据进入内存):

*

* --- 输出流(将内存数据写入或是现实在其他设备上):

*

* - 按照处理的数据单位划分:

* --- 字节流:读取的数据都是文件中的二进制,不会做任何处理

*

* --- 字符流:读取的是二进制数据,但是会把二进制数据转换成能字面量的形式

*

* --| 输入字节流InputStream 所有输入字节流的基类,是一个抽象类

* -------|FileInputStrem 读取【文件数据】的输入字节流

*

* 读取文件数据的步骤:

* 1.定位目标文件;

* 2.构建数据的输入通道;

* 3.读取文件数据;

* read()从输入流【读取一个字节】并返回,如果没有数据可读,将阻塞;

* 为了提高读取效率,可以结合缓冲数组byte[] 来提升读取效率,缓冲数组的大小一般设置

* 为1024;

* 4。关闭输入通道;

* close();

*

* 说明:

* 1.文件资源一旦使用完毕,必须马上释放,否则该资源无法被别的程序锁操作。

* 2.

*/

package com.michael.iodetail;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Demo01 {

public static void main(String[] args){

readFileData(); //方式一

readFileDate2(); //方式二:

readFileData3(); //方式三

}

public static void readFileData3(){

//1.定位目标文件

File file = new File("c:\\a.txt");

//2.建立数据输入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.使用缓冲数组循环读取文件内容

int length = 0;

byte[] buf = new byte[1024];

try {

while((length=fileInputStream.read(buf))!=-1){

String content = new String(buf,0,buf.length);

System.out.println(content);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//4.关闭文件输入通道

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//读取方式二:使用缓冲数组读物文件你让,缺点:无法一次读取文件全部内容

public static void readFileDate2(){

//1.定位目标文件

File file = new File("c:\\a.txt");

//2.建立数据的输入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.读物文件内容

byte[] buf = new byte[1024]; //定义缓冲数组大小

try {

int length = fileInputStream.read(buf);

System.out.println(length);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} //读取的数组已经存入字节数组buf中,每次只能读3个字节,返回值是本次读取的字节数

//使用字节数组构建字符串

String content = new String(buf,0,buf.length);

System.out.println(content);

//4.关闭文件读物通道

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//读取方式一:使用read循环读取文件内容,缺点:每次只能读一个字节,效率较低

public static void readFileData(){

//1.定位目标文件

File file = new File("c:\\a.txt");

//2.构造数据输入通道

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//3.读取文件数据

//read()读取一个字节的数据并返回

int content = 0;

try {

while((content=fileInputStream.read())!=-1){ //循环读物文件数据

System.out.print((char)content);

}

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

你可能感兴趣的:(java入门 -- Java I/O (二) 输入流(文件读取))