黑马程序员--Java学习日记之复习总结(递归以及IO流概述)

来源:互联网 发布:oracle数据库外键约束 编辑:程序博客网 时间:2024/05/19 16:35

                                                                        ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------





一.递归:
 1.递归是基于:方法可以自己调用自己;
 2.注意:
  1).一定要有出口,否则就是死递归;
  2).次数不能太多,否则堆栈溢出;
  3).构造方法不能递归调用;
 3.重点练习:
  1).递归输出指定目录下所有的java文件的绝对路径案例
  2).递归删除带内容的目录案例
二.IO流:
 1.IO流概念:
  1.IO流:InputStream和OutputStream
  2.流:是有方向的,线性的;
  3.分类:
   A.按流向:
    输出流
    输入流
   B.按读写方式:
    字节流:
     输出流:OutputStream
       |--FileOutputStream(覆盖写、追加写)(文件可以不存在)
        1).构造方法:
         覆盖写:
         FileOutputStream(String name):
         FileOutputStream(File file);
         追加写:
         FileOutputStream(String name,boolean append):
         FileOutputStream(File file,boolean append);
        2).写入方法:
         write(int b):
         write(byte[] byteArray):
         write(byte[] byteArray,int off,int len):
        3).关闭流:
         close();
     输入流: InputStream
       |--FileInputStream(文件必须存在,否则报错)
        1).构造方法:
         FileInputStream(String name):
         FileInputStream(File file):
        2).读取的方法:
         int read();//今天学的
         int read(byte[] byteArray)://下次课
        
    字符流:
     输出流:Writer
     输入流:Reader

一,A.字节流:
  1.输出流:OutputStream(抽象类)
  |--FileOutputStream(类)
  2.输入流:InputStream(抽象类)
  B.字符流:
  1.输出流:Writer(抽象的)
  2.输入流:Reader(抽象的)
二,FileOutputStream的构造方法:
  构造方法;
  FileOutputStream(String name):使用一个文件名构造一个输出流
  FileOutputStream(File file):使用一个File构造一个输出流:
三,使用FileOutputStream向文件写入数据: 
  成员方法:
  public void write(int b):写入一个int
  public void write(byte[] b):写入一个byte数组(重点掌握)(使用String类的getBytes()获取byte[]数组)
  public void write(byte[] b,int off,int len):写入一个byte数组中从off开始,len个长度(重点掌握) 
  public void close():关闭流:
四, 换行符和追加写入: 
  1.换行符:Windows:\r\n
   Linux : \r
   Mac : \n
  
  2.追加写入:使用FileOutputStream的其它构造方法:
  public FileOutputStream(String name, boolean append):append如果为true,则追加写入
  public FileOutputStream(File file,
boolean append):
五,输入流:InputStream(抽象类):
  子类:
  FileInputStream(类):
  构造方法:文件必须存在,如果不存在,则抛出异常:java.io.FileNotFoundException
  FileInputStream(File file)
  FileInputStream(String name) 
  读取方法:
  public int read():一次读取一个字节
  public int read(byte[] b):一次读取一个字节数组填充到参数数组b中(例子放在后面:见标题)
  复制文本代码:
  将项目目录下的output2.txt复制到项目目录的output2_copy.txt 
  步骤:
  1.从output2.txt中读取数据:FileInputStream
  2.一次读取一个字节
  3.向output2_copy.txt中写入数据:FileOutputStream

   一次输出一个字节;

public class Demo {  02.    public static void main(String[] args) {  03.        //1.实例化输入输出流  04.        try{  05.            FileInputStream in = new FileInputStream("output2.txt");  06.            FileOutputStream out = new FileOutputStream("outptu2_copy.txt");  07.            //一次读取一个字节:  08.            int n = 0;  09.            while((n = in.read()) != -1){  10.                out.write(n);  11.            }  12.            //释放资源  13.            in.close();  14.            out.close();  15.            System.out.println("复制完毕!");  16.        }catch(Exception e){  17.              18.        }  19.          20.    }  21.}  

一:字节流:
 1.类层次结构:
 OutputStream:
  |--FileOutputStream:
  |--FilterOutputStream:(没学)
   |--BufferedOutputStream:
 InputStream:
  |--FileInputStream:
  |--FilterInputStream:(没学)
   |--BufferedInputStream:
 2.写入的方法:
  write(int n):写入一个字节:
  write(byte[] byteArray):写入一个字节数组;
 3.读取的方法:
  int read():读取一个字节:
  int read(byte[] byteArray):读取一个字节数组;
 4.字节流可以对:二进制文件和文本文件进行读写。
 5.当读写二进制文件时:首选带缓冲的字节流;
   当读写文本文件时:如果不需要显示,也可以选择字节流。通常
                           使用带缓冲的字符流。

public class Demo {  02.    public static void main(String[] args) throws IOException{  03.        //1.封装源目录  04.        File srcFile = new File("D:\\aaa");  05.        //2.封装目标目录:  06.        File destFile = new File("E:\\");  07.          08.        //调用方法:  09.        copyFile(srcFile,destFile);  10.          11.        System.out.println("复制完毕!");  12.    }  13.  14.    private static void copyFile(File srcFile, File destFile) throws IOException{  15.        File newFile = new File(destFile,srcFile.getName());//E:\\aaa(new File("E:\\","aaa"))  16.        //判断目录是否存在  17.        if(!newFile.exists()){  18.            newFile.mkdir();//创建目录  19.        }  20.        //获取源目录下的所有文件  21.        File[] fileArray = srcFile.listFiles();  22.        for(File f : fileArray){  23.            //针对每个文件定义输入流和输出流  24.            BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));  25.            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(newFile,f.getName())));  26.            //一次读写一个字节数组  27.            byte[] byteArray = new byte[1024];  28.            int n = 0;  29.            while((n = in.read(byteArray)) != -1){  30.                out.write(byteArray,0,n);  31.            }  32.            //释放资源  33.            in.close();  34.            out.close();  35.              36.            System.out.println("文件:" + f.getAbsolutePath() + " 复制完毕!");  37.        }  38.          39.    }  40.}  

二:字符流:
 1.类层次结构:
 Writer:
    |--OutputStreamWriter:
  |--FileWriter:
    |--BufferedWriter:
 Reader:
    |--InputStreamReader:
  |--FileReader:
    |--BufferedReader:
 2.写入的方法:
  基本字符流,和缓冲流都具有的:
   write(int n):写入一个字符:
   write(char[] charArray):写入一个字符数组;
   write(char[] charArray,int off,int len):写入字符数组的一部分;
   write(String s):写入一个字符;
   write(String s,int off,int len):写入一个字符串的一部分;
  缓冲流特有的:
   BufferedWriter:
    newLine();
   BufferedReader:
    String s readLine();
 3.当需要对文本文件进行读写,显示:首选使用带缓冲的字符流;

一.数据输入输出流:
 DataInputStream:数据输入流:
 DataOutputStream:数据输出流:
 可以读写任何的Java的基本数据类型;
二.内存操作流:
 ByteArrayOutputStream:向内存中写入byte[]数组;
 ByteArrayInputStream:从内存中读取byte[]数组;
 作用:
 缓存byte[]数组;就跟StringBuffer缓存String作用相同;
三.打印流:
 1.打印字符流:PrintWriter:
 2.打印字节流:PrintStream:
 特点:
  1.只有输出,没有输入;
  2.可以输出任何类型的数据;
  3.有自动刷新功能,如果启用,部分功能将具有自动刷新功能:
    println(),printf(),format()
  4.可以操作文件;
四.标准输入输出流:
 1.System.in : InputStream
 2.System.out: PrintStream
 3.将标准输入流转换为带缓冲的输入流:
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
 4.三种方式实现获取控制台数据:
  1).Scanner();
  2).main()方法的形参;
  3).System.in;
五.随机访问流:
 1.RandomAccessFile:
 2.它不是流,直接继承自Object
 3.它内部结合了InputStream和OutputStream可以对文件进行读写;
 4.构造方法的mode参数:
  "r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。 
  "rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 
  "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 
  "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
 5.getFilePointer()获取文件指针;
   seek():设置文件指针;
六.序列化和反序列化:
 1.ObjectOutputStream:序列化;
  writeObject(Object obj):
 2.ObjectInputStream:反序列化:
  Object obj readObject();
 3.注意:
  1).被序列化的对象,必须实现Serializable 接口;
  2).被序列化的对象,建议显示的定义成员常量:serialVersionUID
  3).transient可以修饰成员变量不被序列化;
七.Properties类:
 1.它是Map的实现类,直接继承自:Hashtable。所以它就是一个Map
 2.用它来读写配置文件信息;
 3.特有方法:
  setProperty(String key,String value):put()
  getProperty(String key):       get()
  stringPropertyNames():        keySet()
   读写配置文件:
  load(Reader reader):从配置文件中读取属性信息
  store(Writer writer,String comments):向配置文件中写入信息
八.新IO的方法:
 Path:与平台无关的路径。
 Paths:包含了返回Path的静态方法。
  public static Path get(URI uri):根据给定的URI来确定文件路径。
 Files:操作文件的工具类。提供了大量的方法,简单了解如下方法
  public static long copy(Path source, OutputStream out) :复制文件
  public static Path write(Path path, Iterable<? extends CharSequence> lines,Charset cs,OpenOption... options):
  把集合的数据写到文件。

一些常用功能的举例

import java.io.File;import java.io.IOException;/* * File的常用方法 *  */public class FileCommonMethods {    public static void main(String[] args) throws IOException {        //methodCreat();        //methodDelete();        //methodRename();        //methodJudge();        methodGet();    }    //创建功能    public static void methodCreat() throws IOException{        File file=new File("a.txt");//在当前项目下创建这个文件        File file2=new File("e:\\b.txt");//在指定字符串对应的目录下创建文件        System.out.println("a.txt:"+file.createNewFile());        System.out.println("e:\\b.txt:"+file2.createNewFile());        File file3=new File("aaa");//在当前项目下创建aaa这个文件夹        File file4=new File("e:\\aaa");        System.out.println("aaa目录:"+file3.mkdir());        System.out.println("e:\\aaa目录:"+file4.mkdir());        File file5=new File("bbb\\ccc\\ddd");//创建多级目录        System.out.println("bbb\\ccc\\ddd多级目录:"+file5.mkdirs());    }    //删除功能    public static void methodDelete() throws IOException{        File file=new File("a.txt");        System.out.println("a.txt:"+file.createNewFile());        System.out.println("删除文件:"+file.delete());        File file2=new File("bbb\\ccc\\ddd");//创建多级目录        System.out.println("删除多级空目录:"+file2.delete());//删除ddd目录    }    //重命名功能    public static void methodRename() throws IOException{        File file=new File("a.txt");        System.out.println("a.txt:"+file.createNewFile());        //路径相同,就是重命名操作        //System.out.println("路径相同的重命名:"+file.renameTo(new File("a_rename.txt")));        //路径名不同,就是重命名并剪切        System.out.println("路径不同的重命名:"+file.renameTo(new File("e:\\a_rename_dif.txt")));    }    //判断功能    public static void methodJudge() throws IOException{        File file=new File("a.txt");        System.out.println("a.txt:"+file.createNewFile());        System.out.println("isFile:"+file.isFile());//true        System.out.println("isDirectory:"+file.isDirectory());//false        System.out.println("exists:"+file.exists());//true        System.out.println("canRead:"+file.canRead());//true        System.out.println("canWrite:"+file.canWrite());//true        System.out.println("isHidden:"+file.isHidden());//false    }    //获取功能    public static void methodGet() throws IOException{        File file=new File("a.txt");        System.out.println("a.txt:"+file.createNewFile());        System.out.println("getAbsolutePath:"+file.getAbsolutePath());//E:\JavaSE_WorkSpace\My_File\a.txt        System.out.println("getPath:"+file.getPath());//a.txt        System.out.println("getName:"+file.getName());//a.txt        System.out.println("length:"+file.length());//0字节        System.out.println("lastModified:"+file.lastModified());//1433761845896毫秒    }}1

                                                                    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



0 0
原创粉丝点击