您的位置:首页 > 其它

FileInputStream 读取文件数据的输入字节流

2015-08-04 19:56 423 查看
package com.inputstream;

/*
File类: 用于描述一个文件或者文件夹的。

通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流技术。

IO流(Input Output)

IO流解决问题: 解决设备与设备之间的数据传输问题。  内存--->硬盘   硬盘--->内存
IO流技术:
IO流分类:
如果是按照数据的流向划分:
输入流
输出流
如果按照处理的单位划分:
字节流: 字节流读取得都是文件中二进制数据,读取到二进制数据不会经过任何的处理。
字符流: 字符流读取的数据是以字符为单位的 。 字符流也是读取文件中的二进制数据,不过会把这些二进制数据转换成我们能 识别的字符。
字符流 = 字节流 + 解码
输入字节流:
--------| InputStream 所有输入字节流的基类  抽象类
------------| FileInputStream  读取文件数据的输入字节流
使用FileInputStream读取文件数据的步骤:
1. 找到目标文件
2. 建立数据的输入通道。
3. 读取文件中的数据。
4. 关闭 资源.
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
*   字节流
* @author Administrator
*
*/
//方式2 : 使用循环读取文件的数据
/*class Inputtest{
public static void inputRead1(String path){
File file = new File("E://aa.txt");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
int str =0;
while((str = inputStream.read())!=-1){
System.out.print((char)str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally{
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

public class Demo1 {

public static void main(String[] args) {
Inputtest inputtest = new Inputtest();
inputtest.inputRead1("E://aa.txt");
}
}*/

//方式3:使用缓冲 数组 读取。    缺点: 无法读取完整一个文件的数据。
/*class inputTest{
public static void inputRead2(){
File file =new File("E://aa.txt");
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
byte[] bs = new byte[1024];
int length = inputStream.read(bs);
String str = new String(bs,0,length);
System.out.println("内容是:");
System.out.println(str);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally{
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public class Demo1 {

public static void main(String[] args) {
inputTest inputTest = new inputTest();
inputTest.inputRead2();
}
}*/

//方式4:使用缓冲数组配合循环一起读取。
class inputTest{
public static void inputRead3(){
//找到目标文件
File file = new File("E://aa.txt");
InputStream inputStream = null;
try {
//建立数据的输入通道
inputStream = new FileInputStream(file);
//建立缓冲数组配合循环读取文件的数据。
int length = 0;//保存每次读取到的字节个数。
byte[] bs = new byte[1024];//存储读取到的数据    缓冲数组 的长度一般是1024的倍数,因为与计算机的处理单位。  理论上缓冲数组越大,效率越高
while((length = inputStream.read(bs))!=-1){// read方法如果读取到了文件的末尾,那么会返回-1表示。
String str = new String(bs,0,length);
System.out.println("内容是"+"\n"+str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}finally{
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
}

public class Demo1 {

public static void main(String[] args) {
inputTest inputTest = new inputTest();
inputTest.inputRead3();
}
}

/*public class Demo1 {

public static void main(String[] args) {
// TODO Auto-generated method stub

//File file = new File("E://aa.txt");
Inputtest inputtest = new Inputtest();
File[] files = Inputtest.inputRead("E://aa.txt");

}

}

class Inputtest{
public static File[] inputRead(String path){
File file = new File("E://aa.txt");
File[] files = file.listFiles();
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(file);
int str=0;

while(str != -1){
str = fileInputStream.read();
System.out.print((char)str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
if(fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return files;
}
}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: