IO流学习
步骤
示例文件的读写操作
往文件里写入数据
package cn.Reader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; /* * 写出文件 */ public class Demo02 { public static void main(String[] args) { //1.建立联系 File对象 目的地 File dest=new File("C:/Users/Administrator/Desktop/sun/08_IO流技术/a.txt"); //2.选择流,文件输出流 OutputStream FileOutputStream OutputStream os=null; //以追加形式写出文件 try { os=new FileOutputStream(dest,true); //true是追加,false是覆盖 //3.操作 String str="very good "; //字符串转字节数组 byte[] data=str.getBytes(); os.write(data,0,data.length); os.flush(); //强制刷新出去 } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("文件未找到"); } catch (IOException e) { e.printStackTrace(); System.out.println("文件写出失败"); } finally { //释放资源 try { if(null!=os) { os.close(); } }catch (Exception e2){ System.out.println("关闭输出流失败"); } } } }
读取数据
package cn.Reader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /* * 文件的读取 * 1.建立联系 */ public class Demo01 { public static void main(String[] args) { //1.建立联系 ,File对象 File src=new File("C:/Users/Administrator/Desktop/sun/08_IO流技术/a.txt"); //2.选择流 InputStream is=null; //提升作用域 try { is=new FileInputStream(src); //只要与外界建立联系就有异常 //3.操作不断读取 缓冲数组 byte[] car=new byte[1024]; int len=0; //接收实际读取的大小 //循环读取 while(-1!=(len=is.read(car))) { //不是空,就不断读取 -1为空 //输出 字节数组 转成字符串 String info =new String(car,0,len); System.out.println(info); } } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("文件不存在"); } catch (IOException e) { e.printStackTrace(); System.out.println("读取文件失败"); } finally { //释放资源 try { if(null!=is) { is.close(); } }catch(Exception e2){ System.out.println("文件输入流关闭失败"); } } } }
文件拷贝操作
package cn.Reader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /* * 拷贝文件 */ public class CopyFile { public static void main(String[] args) { String src1="C:/Users/Administrator/Pictures/Saved Pictures/a.jpg"; String dest1="C:/Users/Administrator/Pictures/Saved Pictures/100.jpg"; try { CopyFiles(src1,dest1); } catch (IOException e) { e.printStackTrace(); System.out.println("copy 失败"); } } public static void CopyFiles(String srcPath,String destPath ) throws IOException { //1.建立联系 源(存在且为文件) +目的地(文件可以不存在) // File src=new File("C:/Users/Administrator/Pictures/Saved Pictures/a.jpg"); // File dest =new File("C:/Users/Administrator/Pictures/Saved Pictures/100.jpg"); File src=new File(srcPath); File dest =new File(destPath); //2.选择流 InputStream is =new FileInputStream(src); OutputStream os=new FileOutputStream(dest); //3.文件拷贝 循环 读取+写出 byte[] flush=new byte[1024]; int len=0; //读取 while(-1!=(len=is.read(flush))){ //写出 os.write(flush, 0, len); } os.flush(); //强制刷出 //关闭两个流 os.close(); //后打开的先关闭 is.close(); } }
文件拷贝封装优化(可以是传字符串,也可以传File对象)
package cn.Reader; /* * 文件操作 * 拷贝 */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class FileUtil { public static void CopyFiles(String srcPath,String destPath ) throws IOException { CopyFiles(new File(srcPath),new File(srcPath)); } //对该方法进行重载 public static void CopyFiles(File src,File dest ) throws IOException { if(!src.isFile()) { //不是文件或者为null System.out.println("只能拷贝文件"); throw new IOException("只能拷贝文件"); } //2.选择流 InputStream is =new FileInputStream(src); OutputStream os=new FileOutputStream(dest); //3.文件拷贝 循环 读取+写出 byte[] flush=new byte[1024]; int len=0; //读取 while(-1!=(len=is.read(flush))){ //写出 os.write(flush, 0, len); } os.flush(); //强制刷出 //关闭两个流 os.close(); //后打开的先关闭 is.close(); } public static void main(String[] args) { File src=new File("C:/Users/Administrator/Pictures/Saved Pictures/a.jpg"); File dest =new File("C:/Users/Administrator/Pictures/Saved Pictures/180.jpg"); try { CopyFiles(src,dest); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }