java学习之字节流--InputStream和OutputStream

来源:互联网 发布:高中生语数外软件 编辑:程序博客网 时间:2024/05/16 18:24

字节流:可以处理一切文件,包括二进制 音频,视频, doc等

节点流: InputStream  FIleInputStream

OutputStream FileOutputStream

一、文件的读取

 * 1、建立联系   File对象 源头
2、选择流     文件输入流  InputStream FileInputStream
3、操作  : byte[] car =new byte[1024];  +read+读取大小
              输出
4、释放资源 :关闭
public class Demo01 {public static void main(String[] args) {//1、建立联系   File对象File src =new File("e:/xp/test/a.txt");//2、选择流InputStream is =null; //提升作用域try {is =new FileInputStream(src);//3、操作 不断读取 缓冲数组byte[] car =new byte[1024];int len =0; //接收 实际读取大小//循环读取StringBuilder sb =new StringBuilder();while(-1!=(len=is.read(car))){//输出  字节数组转成字符串String info =new String(car,0,len);sb.append(info);}System.out.println(sb.toString());} catch (FileNotFoundException e) {e.printStackTrace();System.out.println("文件不存在");} catch (IOException e) {e.printStackTrace();System.out.println("读取文件失败");}finally{try {//4、释放资源if (null != is) {is.close();}} catch (Exception e2) {System.out.println("关闭文件输入流失败");}}}}
二、写出文件
1、建立联系   File对象  目的地
2、选择流     文件输出流  OutputStream FileOutputStream
3、操作  :  write() +flush
4、释放资源 :关闭
public class Demo02 {public static void main(String[] args) {//1、建立联系   File对象  目的地File dest =new File("e:/xp/test/test.txt");//2、选择流   文件输出流  OutputStream FileOutputStreamOutputStream os =null;//以追加形式 写出文件 必须为true 否则为覆盖try {os =new FileOutputStream(dest,true);//3、操作String str="bjsxt is very good \r\n";//字符串转字节数组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{//4、释放资源 :关闭try {if (null != os) {os.close();}} catch (Exception e2) {System.out.println("关闭输出流失败");}}}}
三、文件拷贝 程序为桥梁
1、建立联系 源(存在且为文件) + 目的地(文件可以不存在)
2、选择流
3. 文件拷贝, 操作:循环+读取+写出

4. 释放资源

public class CopyFileDemo {public static void main(String[] args) {String src ="E:/xp/test";String dest="e:/xp/test/4.jpg";try {copyFile(src,dest);} catch (FileNotFoundException e) {e.printStackTrace();System.out.println("文件不存在");} catch (IOException e) {e.printStackTrace();System.out.println("拷贝文件失败|关闭流失败");}}/** * 文件的拷贝 * @param  源文件路径 * @param  目录文件路径 * @throws FileNotFoundException,IOException * @return  */public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {//1、建立联系 源(存在且为文件) +目的地(文件可以不存在)  File src =new File(srcPath);File dest =new File(destPath);if(! src.isFile()){ //不是文件或者为nullSystem.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();}}

四、目录文件的拷贝

1、文件 赋值  copyFile
 2、文件 创建 mkdirs()
 3、递归查找子孙级

public class CopyDir {public static void main(String[] args) {//源目录String srcPath="E:/xp/test/a"; //目标目录String destPath="E:/xp/test/a/b";copyDir(srcPath,destPath);}/** * 拷贝文件夹 * @param src 源路径 * @param dest 目标路径 */public static void copyDir(String  srcPath,String destPath){File src=new File(srcPath);File dest =new File(destPath);copyDir(src,dest);}/** * 拷贝文件夹 * @param src 源File对象 * @param dest 目标File对象 */public static void copyDir(File src,File dest){if(src.isDirectory()){ //文件夹dest =new File(dest,src.getName());}copyDirDetail(src,dest);}/** * 拷贝文件夹细节 * @param src * @param dest */public static void copyDirDetail(File src,File dest){if(src.isFile()){ //文件try {//拷贝文件操作,省略} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}else if(src.isDirectory()){ //文件夹//确保目标文件夹存在dest.mkdirs();//获取下一级目录|文件for(File sub:src.listFiles()){copyDirDetail(sub,new File(dest,sub.getName()));}}}}


0 0