输入流 —— 读入数据
输出流 —— 写出数据
字节流 ———— 可以读写任何类型的文件 eg:音频 文本
字符流 ———— 只能读写文本文件
用完记得close( ) :通知系统释放关于文件的资源 让IO流对象变成垃圾,等待垃圾回收器对其进行回收
Windows下的换行符———— \r\n
Linux下的换行符————\n
eg: FileOutputStream out = new FileOutputStream("a.txt");
out.write(97);
out.write(98);
out.write(99);
out.write(200);
byte[] bytes = {100,101,102,103,104,105};
out.write(bytes);
out.write("\r\n".getBytes());
String s = "我不愿失去每一寸泥土";
out.write(s.getBytes());
out.close();
FileOutputStream out = new FileOutputStream("a.txt",true);
用完记得close( ) :通知系统释放关于文件的资源 让IO流对象变成垃圾,等待垃圾回收器对其进行回收
eg: byte[] bytes = new byte[1024];————创建一个字节数组 充当缓冲区
int read1 = in.read(bytes);————读取缓冲区中的字节数
System.out.println(read1);————返回的是读到的有效的字节个数
for (byte aByte : bytes) {
System.out.println(aByte);————遍历a.txt中每个字节数 1024-len 其余为0
}
eg: FileInputStream in = new FileInputStream("b.txt");
byte[] bytes = new byte[1024];
int len = in.read(bytes, 0, 20);————一次读取一部分字节 放进缓冲区中
System.out.println(len);
for (byte aByte : bytes) {
System.out.println(aByte);——————只读取20个字节数 其余为0
}
String s = new String(bytes, 0, 10);————把字节数组中的字节数转成字符输出
System.out.println(s);————————0-20的字节数组转换成字符数组
注:若要将字节数组转换成字符数组,定义字符串时只能在字节数组的范围内转换
eg: FileOutputStream out1 = new FileOutputStream("c.txt");
FileInputStream in1 = new FileInputStream("c.txt");
int read = in1.read();
System.out.println(read);——————————输出为-1
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo5 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("b.txt");
FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\b.txt");
int len = 0;
while((len = in.read())!=-1){
out.write(len);————————在赋值的文件中写出读取的第一个字节数组
//out.flush();
}
in.close();
out.close();
System.out.println("复制完成");
}
}
————————————一次读取一个字节 一次复制一个字节
import java.io.*;
public class demo6 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("C:\\Users\\ZY\\Desktop\\Blow Fever - 旋转椅 (Live).mp3");//封装文件
FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\Blow Fever-旋转椅.mp3");//所复制的新文件
int len = 0;
long start = System.currentTimeMillis();
while((len = in.read())!=-1){
out.write(len);
out.flush();
}
long end = System.currentTimeMillis();
in.close();
out.close();
System.out.println("复制完成 共耗时"+(end-start)+"毫秒");————输出:复制完成 共耗时54040毫秒
}
}
高效率复制——————创建一个字节数组 读取并赋值
————————————一次读取一个字节数组的大小 1024*8 并复制
import java.io.*;
public class demo7 {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\ZY\\Desktop\\Blow Fever - 旋转椅 (Live).mp3");
FileInputStream in = new FileInputStream(file);
FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\photo\\" + file.getName());
byte[] bytes = new byte[1024 * 8];————————创建一个字节数组
int len = 0;
long start = System.currentTimeMillis();
while ((len = in.read(bytes))!=-1){
out.write(bytes,0,len);——————————一次读取1024*8个字节数并赋值
}
long end = System.currentTimeMillis();
System.out.println("复制完成 共耗时"+(end-start)+"毫秒");——————输出:
复制完成 共耗时22毫秒
in.close();
out.close();
}
}
抓取异常
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo8 {
public static void main(String[] args) {
FileInputStream in = null;
FileOutputStream out = null;
try{
File file = new File("C:\\Users\\ZY\\Desktop\\ICE - ICE (Live).mp3");
in = new FileInputStream(file);
out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\"+file.getName());
int len = 0;
byte[] bytes = new byte[1024 * 8];
while ((len = in.read(bytes))!=-1){
out.write(bytes,0,len);
}
System.out.println("复制完成!");
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}
字节缓冲流:给基本的字节流一个包装 使其更高效的读写 需要接受一个基本字节FileInputStream流对象
不用自己创建字节数组重放缓冲流 自带缓冲流
import java.io.*;
public class demo9 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\ZY\\Desktop\\潘玮柏 _ G.E.M. 邓紫棋 _ 艾热 - 攀登 (Live).mp3"),1024*8);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\攀登 (Live).mp3"));
byte[] bytes = new byte[1024 * 8];
int len = 0;
long start = System.currentTimeMillis();
while((len = bis.read(bytes))!=-1){
bos.write(bytes,0 ,len);
}
long end = System.currentTimeMillis();
bis.close();
bos.close();
System.out.println("复制完成 共耗时"+(end-start)+"毫秒");
}
}