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

java基础学习IO流之字节流 十一 -4

2017-03-09 18:32 302 查看
字节流;

FileOutputStream

FileInputStream

很多用法和字符流类似效果。。。

FileOutputStream

字节流简单写的操作;

package io2;

import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Angus
*	字节流
*		FileOutputStream
*		FileInputStream
*
*	写的方法
*	void write(byte[] b)  将 b.length 个字节从指定 byte 数组写入此文件输出流中。
void write(byte[] b, int off, int len)  将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
void write(int b) 将指定字节写入此文件输出流。
*
*/
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fo = new FileOutputStream("a.txt");
//		FileOutputStream fo = new FileOutputStream("a.txt",true); //是否追加数据

fo.write(97);
fo.write(98);
//		fo.flush(); 字节流基本不用

byte[] bys = {97,98,99,100,101};
byte[] bys2 = {'a',98,99,100,101}; //这样也可以
fo.write(bys);

fo.write(bys2, 0, 2);
fo.close();
}
}


FileInputStream

读取数据
package io2;

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

/**
* @author Angus
*	字节流读取数据
*
*	read() 从此输入流中读取一个数据字节。
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
int read(byte[] b, int off, int len)  从此输入流中将最多 len 个字节的数据读入一个

*/
public class FileInputStreamDemo {

public static void main(String[] args) throws IOException {
//创建字节流对象
FileInputStream fi = new FileInputStream("d.txt");

//读取数据

//方式一
int by = 0;
//		while((by=fi.read()) != -1){
//			System.out.print((char)by);  //这样每次一个字节读取的话,汉字会出现问题
//		}

//方式二
byte[] bys = new byte[1024];
int len = 0;
while((len = fi.read(bys)) != -1){
System.out.print(new String(bys,0,len));  //但是这样也有部分问题1025出现汉字也有问题
//建议字符流读取
}
//释放资源
fi.close();
}

}


复制文件操作:
package io2;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* @author Angus
*	复制文件
*	数据源;a.txt
*	目的地:e.txt
*/
public class CopyFile {

public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");

FileOutputStream fos = new FileOutputStream("e.txt");

//读取
//方式一
//		int by = 0;
//		while((by = fis.read()) != -1){
//			fos.write(by);
//		}

//方式二
byte[] bys = new byte[1024];
int len = 0;

while((len = fis.read(bys)) != -1){
fos.write(bys,0,len);//如果不够1024会对出字节,需要限制写的大小
}

fos.close();
fis.close();
}

}


字符流和字节流结合复制图片:
package io2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* @author Angus
*	复制图片
*
*	二进制流数据:图片,音频,视频
*/
public class CopyImage {
public static void main(String[] args) throws IOException {
//		method();
method2();
}
/**
* 字节流读取
*/
private static void method2() throws IOException{
FileInputStream fis = new FileInputStream("111.jpg");
FileOutputStream fos = new FileOutputStream("333.jpg");

byte[] bys = new byte[1024];
int len = 0;
while((len = fis.read(bys)) != -1){
fos.write(bys, 0, len);
}
fos.close();
fis.close();
}
/**
* 用字符流操作
* @throws IOException
*/
private static void method() throws IOException {
FileReader fr = new FileReader("111.jpg");
FileWriter fw = new FileWriter("222.jpg");

int ch = 0;
while((ch= fr.read()) != -1){
fw.write(ch);   //会发现复制的图片大小发生变化了,多数据了。
//由于二进制数据合并的时候没有对应的数据,这样就会造成数据的丢失
//二进制流只能用字节流操作
}
fw.close();
fr.close();

}
}


最后总结:凡是可以记事本打开的字符流,其它字节流

最后附上JDK使用文档API 下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息