java基础(jdk1.8)
**
文件IO——字节流
**
Java操作byte来实现流的输入输出,前文说过输入输出是相对Java而言的。
字节流标识每次进行IO时最小单位为1字节,也就是1byte
字节输出流
OutputStream 接口为字节输出流顶类
子类
-
ByteArrayOutputStream
-
FileOutputStream
-
FilterOutputStream
-
…
方法
write(byte []); //向文件中写入字节数组
write(int); //向文件写入一个字节
write(byte [],int,int); //向文件从byte的int开始,共int个字节
字节输入流
InputStream 接口为字节输入流顶类
子类
-
ByteArrayInputStream
-
FileInputStream
-
FilterInputStream
-
…
方法
read(); //读取下一个字节(1个)
read(byte[]); //读取一定量字节到传入字节数组内
构造方法
参数: File类
异常: FileNotFoundException --》IOException
读写文件
读:
try {
//读取d盘下b.txt文件内的内容,文件不存在则会抛出异常
InputStream is = new FileInputStream("D:\\b.txt");
//字节数组,用来循环打印文件内容用的,数组大小可以根据文件大小进行调节
byte [] bytes = new byte[20];
int len;
//使用read(byte[])方法,读取内容到byte数组内,读取更新,遇到-1则到结尾
while ((len = is.read(bytes)) != -1)
{
//输出byte数组内容,输出从bytes的0到len
System.out.print(new String(bytes,0,len));
/**
* 如果直接输出bytes的全部则可能导致读取数据最后多出一些字符,
* 这是由于bytes数组每次读取会覆盖原有的内容,
* 最后读取到结尾时,直接输出数组的值则会将数组结尾之后的也读取出来
*/
}
} catch (IOException e) {
e.printStackTrace();
}
写:
try {
//第一个参数指写入的文件,文件不存在会创建文件,不符合文件标准会抛出异常
//第二个参数指明在文件后面追加内容,默认为false,则会重置文件内容
OutputStream os = new FileOutputStream("D:\\b.txt",true);
os.write("你好Output".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
复制文件:
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("D:\\Phoenix.mp3");
OutputStream os = new FileOutputStream("D:\\music\\Phonenix.mp3");
//记时
long start = System.currentTimeMillis();
//数组开辟大小可以根据文件大小来自适应调节,复制时间也会相应改变
byte [] bytes = new byte[1024*100];
int len;
while ((len = is.read(bytes)) != -1)
{
os.write(bytes,0,len);
}
long end = System.currentTimeMillis();
//复制文件花费总时间 毫秒数
System.out.println(end - start);
}
注意:
使用字节流以字节为单位的文件,主要针对非文本文件(mp3、mp4、rar等)。
文本文件指使用记事本打开可以读取的文件。
字节流对中文进行读写可能导致出现问题,这是可能是编码不一致导致的问题。文本文件使用字符流读写即可。
有兴趣的关注我的公众号,一起学习交流啊
上一篇 》IO流对象
下一篇 》字符流