字节输入流的后缀为InputStream,文件字节输入流的全名为FileInputStream
以字节的形式对外部文件(磁盘上的文件,网络文件)进行读取操作,把内容读取到程序中,并在程序中进行相应的操作。
Hello,Java!!!!
package Work03;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("src/Work03/temp.txt");
int readData=0;
while ((readData=fis.read())!=-1){
System.out.print((char)readData);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//需要进行非空判断,才能进行文件字节输入流的关闭
// 若是空的话,无需去理会她,因为过段时间会被gc垃圾回收器去进行回收的
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
temp.txt文件
Hello,Java!!!!
//这个文本的字节个数恰好是byte数组长度的整数倍
FileInputStreamTest文件
package Work03;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("src/Work03/temp.txt");
byte[] bytes=new byte[2];
while ((fis.read(bytes))!=-1){
System.out.print(new String(bytes));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//需要进行非空判断,才能进行文件字节输入流的关闭
// 若是空的话,无需去理会她,因为过段时间会被gc垃圾回收器去进行回收的
//非空判断对象名.notnull就会自动生成非空判断语句
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
temp.txt文件
Hello,Java1
//这个字节的数量不是byte数组长度的整数倍
FileInputStreamTest文件
package Work03;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("src/Work03/temp.txt");
byte[] bytes=new byte[2];
while ((fis.read(bytes))!=-1){
System.out.print(new String(bytes));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//需要进行非空判断,才能进行文件字节输入流的关闭
// 若是空的话,无需去理会她,因为过段时间会被gc垃圾回收器去进行回收的
//非空判断对象名.notnull就会自动生成非空判断语句
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
因为你读取到va的时候,byte[0]=118(v对应的asci码值),byte[1]=97,
然后再往后读取时,发现只有一个新的数据1,此时byte[0]=49,byte[1]保持不变
你打印是将所有byte数组里面的内容打印了,所以最后两个字符会依次打印成1和a
因此会得到一些不太符合要求的结构
因此这种方法用的很少,采用3.3方式用的较多
temp.txt
Hello,Java1!Facts speak louder than words
FileInputStreamTest类
package Work03;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("src/Work03/temp.txt");
byte[] bytes=new byte[1024];
//这个尽可能的大,是因为可以读取显示的时候尽量让中文不出现乱码问题,而且大的话也可以提高读取效率
int readLen=0;
//readLen为:每次read方法读取的有效数据(新数据)的个数
while ((readLen=fis.read(bytes))!=-1){
System.out.print(new String(bytes,0,readLen));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//需要进行非空判断,才能进行文件字节输入流的关闭
// 若是空的话,无需去理会她,因为过段时间会被gc垃圾回收器去进行回收的
//非空判断对象名.notnull就会自动生成非空判断语句
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}