1.IO:
  1.File
    (一)注意:
      a.可以表示文件或者文件夹(也可称为目录)
      b.创建的File对象实际上不存在的文件只是代表了一个抽象路径
      c.Windows中分隔符'\'('//'也可以);Unix/Linux'\';更专业的写法:File.pathSeparatorChar
    (二)绝对路径相对路径
      a.Unix,绝对路径前缀‘/’就可以了,Windows前缀由“c:\\..”;
        Unix没有相对路径,Windows相对路径没有盘符前缀‘.’当前目录;‘..’上级目录
    (三)File实例常用方法:
      createNewFile();
      mkdir():在指定的位置创建最后一级目录,如果上级目录不存在就会报错
      mkdirs():创建指定目录,如果上级目录不存在就创建
      renameTo(File dest)重命名文件夹
      delete():删除文件或文件夹,如果文件夹不为空删不了
      判断:exists();isFile();isDirectory();isHidden();isAbsolute();
      获取:getName();getPath();getAbsolutePath();length();getParent();lastModified();
      listRoots():这个返回所有的根目录;
      list():返回目录下的文件,文件的话返回null
      list(FilenameFilter filter)返回指定当前目录中符合过滤条件的文件或者文件夹
      listFiles():返回目录下的文件或者目录(File类实例)

    (四)题目
      a.列出指定目录中所有的子孙文件与子孙目录名,只需要列出名称即可
      b.列出指定目录中所有扩展名为.java的文件,写一个工具类传入一个参数后缀名
      这里列出代码:
     

    /**
* 从指定路径中找到所有的文件和文件夹
* @param path
*/
public static void listAllFilesAndDirs(String path){
File f1=new File(path);
File[] files=f1.listFiles();
for(File i:files){
if(i.isFile()){
System.out.println(("子文件:"));
System.out.println("\t" + i.getName());
}else if(i.isDirectory()){
System.out.println(("子目录:"));
System.out.println("\t" + i.getName());
}
}
}
/**
* 从指定路径中找出指定扩展名的文件
* @param path
* @param extension
*/
public static void listAllFiles(String path,String extension){
File f1=new File(path);
File[] names=f1.listFiles();
for(File i:names){
if(i.getName().endsWith(extension)){
System.out.println(i.getName());
}
}
}

  2.IO流
    (一)注意:
      a.File能表示存在文件也可表示不存在,但我们想要操作文件内容就需要IO流技术
      b.java对设备中数据通过流来操作;设备是指硬盘,内存,网络等
      c.java中操作流的对象都在IO包中
      d.流分类.数据类型:字节流;字符流;按流向:输入流;输出流
    (二)字节流:
      a.计算机中数据都是以字节流的方式存储的,我们的64位操作系统就是指最大流宽度8个字节
      b.基类java.io.InputStream;java.io.OutputStream
      c.字节流处理的单位是字节,用于操作二进制文件
    (三)InputStream输入字节流基类抽象类
      a.FileInputStream:读取文件数据的输入字节流
      步骤:1.找到目标文件
              2.建立数据输入通道
          3.读取文件中数据
          4.关闭资源
      注意:读完文件一定要释放资源否则别人不能使用
      例子:

    /**
* 这个方法只能读取一部分,大小由存放流数据文件的buff决定
* 因为文件读取到buff满了后没有地方可放了
* 所以正确的还要加个循环就好了
* @param path
* @throws IOException
*/
public static void readTest1(String path) throws IOException{
File f=new File(path);
FileInputStream fis=new FileInputStream(f);
byte[] buff=new byte[1024*67];
int length=fis.read(buff);
System.out.println("length:"+ length);
String content=new String(buff,0,length);
System.out.println(content);
fis.close();
}
/**
* 完善后的读取文件都能读取了
* @param path
* @throws IOException
*/
public static void readTest2(String path) throws IOException{
File f=new File(path);
FileInputStream f1=new FileInputStream(f);
byte[] buff=new byte[1024];
int length=0;//存放读取的文件长度
int lenz=0;
while((length=f1.read(buff))!=-1){
System.out.print(new String(buff,0,length));
lenz+=length;
}
System.out.println(lenz);
f1.close();
}

      b.BufferedInputStream:就是维护了一个8kb的字节数组
       步骤:1.找到目标文件
        2. 建立缓冲输入字节流
        3.读取
        注意:凡是缓冲流都不具备读写文件的能力
        提问:1.为什么创建BufferInputStream时需要传递FileInputStream?
             BufferInputStream 本身不具备读文件的能力,所有需要借助FileInputStream来读取数据
           2.BufferInputStream出现目的是提高读取文件的效率,但是BufferInputStream方法每次读取一个字节数据 而FileInputStream每次也是只读一个字节的数据,那么这个东西它效率高的原因?

这个需要查看器read()方法发现原因:本质原因是内存读取速度快要硬盘读取速度;
                                   内部原理:先获取8kb数据放到缓存区中,然后再从缓存区中一个字节一个字节获取数据,所有这里的每次获取一个字节和FileInputStream每次获取一个字节所处读取环境不一样一个是内存一个是硬盘

      例子:复制文件

    public static void copyImage1(String pathfrom,String pathTo) throws IOException{
File f1=new File(pathfrom);
File f2=new File(pathTo); FileInputStream input=new FileInputStream(f1);
FileOutputStream output=new FileOutputStream(f2); byte[] buff=new byte[1024];
int length=0;
while((length=input.read(buff))!=-1){
output.write(buff, 0, length);
} output.close();
input.close();
}

    (四)OutputStream输出字节流基类抽象类
      a.FileOutStream向文件输入数据
      步骤:1找到目标文件
        2.建立数据输出通道
        3.读取文件中的数据
        4.关闭资源
      注意:1.使用FileOutStream时,如果目标文件不存在,那么会创建
        2.使用期写数据时,如果目标文件已存在,会清空目标文件中的数据,然后再写入
        3.如果想要在已存在的目标文件中末尾写,需要new FileOutStream(file,true)//第二个参数为true才行
        4.write()方法如果传入的是数字,他也只会截取前8位一个字节的大小
      例子:public static void writeTest1() throws IOException{
          File f=new File("C:/a/e.txt");
          FileOutputStream out=new FileOutputStream(f);
          String content="adasdfasdf";
          //out.write('a');
          out.write(content.getBytes());
          out.close();
         }
    (五)例子:
       a.复制文件

public static void copyImage1(String pathfrom,String pathTo) throws IOException{
File f1=new File(pathfrom);
File f2=new File(pathTo); FileInputStream input=new FileInputStream(f1);
FileOutputStream output=new FileOutputStream(f2); byte[] buff=new byte[1024];
int length=0;
while((length=input.read(buff))!=-1){
output.write(buff, 0, length);
} output.close();
input.close();
}

b.用缓冲输入输出字节复制文件

public static void copyFile(String pathFrom,String pathTo) throws IOException{
File f=new File(pathFrom);
File t=new File(pathTo); FileInputStream fis=new FileInputStream(f);
FileOutputStream fos=new FileOutputStream(t); BufferedInputStream buffI=new BufferedInputStream(fis);
BufferedOutputStream buffO=new BufferedOutputStream(fos);
//边读边写
int content=0;
//int length=buffI.read(buffer)//如果传入了缓冲数组,内容是存储到缓冲数组中,返回值是存储到缓冲数组中的字节个数。
while((content=buffI.read())!=-1){//read没有传参数返回值就是读取到的内容
buffO.write(content);
}
buffO.close();
buffI.close();
}

  3.IO异常处理(这里是比较麻烦的):
    注意:IO异常时,代码后面都不需要执行了所以必须用throw关键字阻止后面代码执行且能出现异常信息
        每次关资源的时候也需要这样弄下
        我们抛出的异常用RuntimeException(e)本质是抛出e,但是有这个包着,编译器就不会认为是IO异常立马让我们处理
    模板例子:

public static void copyFile(String pathForm,String pathTo){
FileInputStream input=null;
FileOutputStream output=null;
try{
File f1=new File(pathForm);
File f2=new File(pathTo);
input =new FileInputStream(f1);
output=new FileOutputStream(f2);
int length=0;
byte[] buff=new byte[1024];
while((length=input.read(buff))!=-1){
output.write(buff, 0, length);
}
}catch(IOException e){
//IO异常,后后面的代码就不进行了所以用throw
throw new RuntimeException(e);
}
finally{
try{
if(output!=null){
output.close();
System.out.println("关闭输出流对象成功...");
}
}catch(IOException e){
System.out.println("关闭输出流资源失败...");
throw new RuntimeException(e);
}finally{
try{
if(input!=null){
input.close();
System.out.println("关闭输入流资源成功...");
}
}catch(IOException e){
System.out.println("关闭输入流资源失
败...");
throw new RuntimeException(e);
} } } }

java入门了解10的更多相关文章

  1. Java入门 第10天 ,理解数组

    数组的特点: 1.内容的类型固定,不会int String 两个类型一起,要么是int类型 要么是String类型 或者其他类型. 2.长度是固定的,例:String [ ]   myArray  = ...

  2. Java入门(二)——果然断更的都是要受惩罚的。。。

    断更了一个多月,阅读量立马从100+跌落至10-,虽说不是很看重这个,毕竟只是当这个是自己的学习笔记,但有人看,有人评论,有人认同和批评的感觉还是很巴适的,尤其以前有过却又被剥夺的,惨兮兮的. 好好写 ...

  3. Java入门的程序汇总

    Java入门的基础程序,虽然很简单,也要多练习,下面有重点的总结一下 1.HelloWorld这个不说了 2.常量与变量部分 基本数据类型使用 public class Javashujuleixin ...

  4. Java入门学习知识点汇总

    Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...

  5. Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC 0. 目录 JdbcTemplate介绍 JdbcTemplate常见方法 代码示例 参考资料 1. JdbcTemplate介绍 JdbcTempl ...

  6. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

  7. JAVA入门--目录

    在此记录自己的JAVA入门笔记,备忘 JAVA入门[1]--安装JDK JAVA入门[2]-安装Maven JAVA入门[3]—Spring依赖注入 JAVA入门[4]-IntelliJ IDEA配置 ...

  8. python入门(10)使用List和tuple

    python入门(10)使用List和tuple list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可 ...

  9. Java入门1

    一.eclipse的简单使用 1.新建项目 在package explorer的空白处点击右键,新建一个项目(new->Java Project)或者点击菜单栏的File->JavaPro ...

随机推荐

  1. 0x00 使用Ant 设置项目

    1. Ant 简介: Ant 是一款广泛使用的流行的开源构建工具,它用Java语言编写. 2.Ant官网: Ant官网:http://ant.apache.org/ 3.设置环境变量: 新建 Vari ...

  2. Android IntentService全然解析 当Service遇到Handler

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47143563: 本文出自:[张鸿洋的博客] 一 概述 大家都清楚.在Andro ...

  3. Vue+原生App混合开发手记#1

    项目的大致需求就是做一个App,里面集成各种功能供用户使用,其中涉及到很多Vue的使用方法,单独总结太麻烦,所以通过这几篇笔记来梳理一下.原型图如下: 路由配置 主界面会用到一些原生App方法,比如验 ...

  4. Pentaho 免费版本下载地址列表

    Pentaho CE(Community Edition) 免费版本下载地址列表 http://sourceforge.net/projects/pentaho/files/Pentaho 插件名称  ...

  5. linux vmware提示:此虚拟机似乎正在使用中,取得该虚拟机的所有权失败错误

    用vm的时候,没有挂起和关闭虚拟机,直接关实体机.然后不幸的就异常了. 然后今天用的时候提示 此虚拟机似乎正在使用中. 如果此虚拟机已在使用中,请按“取消”按钮,以免损坏它.如果此虚拟机未使用,请按“ ...

  6. android中实现毛笔效果(View 中画图)

    近期有一个项目设计一个APP实现通过触摸屏实现毛笔写字效果.传统的绘画板程序直接通过Path的moveTo和LineTo便可实现简单的线条绘画程序.然而要达到毛笔的笔锋效果则须要更为具体点的设计.我的 ...

  7. Matrix4x4矩阵 api

    Matrix4x4 矩阵api介绍 Namespace: UnityEngine Description 描述 A standard 4×4 transformation matrix. 一个标准的4 ...

  8. display getSize()

    If you want the the display dimensions in pixels you can use getSize: Display display = getWindowMan ...

  9. 模型层TP框架数据库的操作

    在shop入口的文件下的HOME文件夹中使用模型层 第一步修改配置模块把数据库的各种链接做好,打开HOME中的conf文件夹中的config.php,找到Thinkphp文件加下的conf文件打开co ...

  10. 如何使用EasyNVR+CDN突破萤石云在直播客户端数量上的限制,做到低成本高性价比的直播

    恰逢五一假期,有以为来自内蒙的用户向我电话咨询,大概的场景是这样的: 目前用户使用的是全套的海康IPC和NVR设备: 海康NVR设备通过设置萤石云平台,由萤石云对外提供直播服务: 萤石云对单个摄像机同 ...