java fileinputstream_Java FileInputStream和FileOutputStream

java.io.FileInputStream:

1、文件字节输入流,万能的,任何类型的文件都可以采用这个流来读。

2、字节的方式,完成输入的操作,完成读的操作(硬盘---> 内存)

3、IDEA默认的当前路径是哪里?工程Project的根就是IDEA的默认当前路径。

4、FileInputStream类的其它常用方法:

int available():返回流当中剩余的没有读到的字节数量

long skip(long n):跳过几个字节不读。

//int readByte = fis.read();

// 还剩下可以读的字节数量是:5

//System.out.println("剩下多少个字节没有读:" + fis.available());

// 这个方法有什么用?

//byte[] bytes = new byte[fis.available()]; // 这种方式不太适合太大的文件,因为byte[]数组不能太大。

// 不需要循环了。

// 直接读一次就行了。

// skip跳过几个字节不读取

fis.skip(3);

System.out.println(fis.read()); //100

packagecom.bjpowernode.java.io;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;public classFileInputStreamTest04 {public static voidmain(String[] args) {

FileInputStream fis= null;try{//一个个字节读

/*fis = new FileInputStream("D:/course/JavaProjects/02-JavaSE/temp");

// 开始读

int readData = fis.read(); // 这个方法的返回值是:读取到的“字节”本身。

System.out.println(readData); //97*/fis= new FileInputStream("chapter23/src/tempfile3");//准备一个byte数组

byte[] bytes = new byte[4];/*while(true){

int readCount = fis.read(bytes);

if(readCount == -1){

break;

}

// 把byte数组转换成字符串,读到多少个转换多少个。

System.out.print(new String(bytes, 0, readCount));

}*/

int readCount = 0;while((readCount = fis.read(bytes)) != -1) {

System.out.print(new String(bytes, 0, readCount));

}

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if (fis != null) {try{

fis.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

java.io.FileOutputStream:

文件字节输出流,负责写。

从内存到硬盘。

flush()是强行将缓冲区中的内容输出,否则直到缓冲区满后才会一次性的将内容输出

packagecom.bjpowernode.java.io;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;/*** 文件字节输出流,负责写。

* 从内存到硬盘。*/

public classFileOutputStreamTest01 {public static voidmain(String[] args) {

FileOutputStream fos= null;try{//myfile文件不存在的时候会自动新建!//这种方式谨慎使用,这种方式会先将原文件清空,然后重新写入。//fos = new FileOutputStream("myfile");//fos = new FileOutputStream("chapter23/src/tempfile3");//以追加的方式在文件末尾写入。不会清空原文件内容。

fos = new FileOutputStream("chapter23/src/tempfile3", true);//开始写。

byte[] bytes = {97, 98, 99, 100};//将byte数组全部写出!

fos.write(bytes); //abcd//将byte数组的一部分写出!

fos.write(bytes, 0, 2); //再写出ab//字符串

String s = "我是一个中国人,我骄傲!!!";//将字符串转换成byte数组。

byte[] bs =s.getBytes();//写

fos.write(bs);//写完之后,最后一定要刷新

fos.flush();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if (fos != null) {try{

fos.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

文件拷贝

e705fbe3af5886ff0fb041f6fd44616b.png

packagecom.bjpowernode.java.io;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;/*使用FileInputStream + FileOutputStream完成文件的拷贝。

拷贝的过程应该是一边读,一边写。

使用以上的字节流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。*/

public classCopy01 {public static voidmain(String[] args) {

FileInputStream fis= null;

FileOutputStream fos= null;try{//创建一个输入流对象

fis = new FileInputStream("D:\\course\\02-JavaSE\\video\\chapter01\\动力节点-JavaSE-杜聚宾-001-文件扩展名的显示.avi");//创建一个输出流对象

fos = new FileOutputStream("C:\\动力节点-JavaSE-杜聚宾-001-文件扩展名的显示.avi");//最核心的:一边读,一边写

byte[] bytes = new byte[1024 * 1024]; //1MB(一次最多拷贝1MB。)

int readCount = 0;while((readCount = fis.read(bytes)) != -1) {

fos.write(bytes,0, readCount);

}//刷新,输出流最后要刷新

fos.flush();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{//分开try,不要一起try。//一起try的时候,其中一个出现异常,可能会影响到另一个流的关闭。

if (fos != null) {try{

fos.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (fis != null) {try{

fis.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值