IO

IO
 File: 表明文件或者目錄(文件夾)
  delete()方法:  若是刪除的是普通的文本文件 能夠直接刪除
        若是刪除的是目錄 , 
         1.若是目錄中沒有其餘的文件或者目錄  能夠直接刪除
         2.若是目錄中有其餘的文件 或者目錄 ,先把當前目錄中的文件刪除 才能刪除當前的目錄
  mkdir()  建立文件或者目錄  不能建立父目錄
  mkdirs()   建立文件或者目錄   若是父目錄不存在,把父目錄一塊兒建立
 
     isDirectory()   判斷文件是不是一個目錄
  isFile()   判斷是不是一個標準的文件
  
  length()  返回的是文件的長度 大小
  
  list()   得到子文件或者目錄的名字
  listFiles() :File[]   得到子文件或者目錄的對象  存儲到數組中
  
 
 輸入流     輸出流
 字節流(byte)   字符流(char)java

  字節流:  若是讀入的網絡上的資源 就用字節流  好比:圖片 音頻  文本
  字符流:  當肯定是偶數個字節 才用字符流
 
  輸入流:
   字節輸入流:xxxxInputStream
   
   字符輸入流:xxxxReader
   
  輸出流:
   字節輸入流:xxxxOutputStream
   
   字符輸入流:xxxxWrite
   
 轉換流:
  InputStreamReader  和  OutputStreamWriter
   
   InputStreamReader:  字節輸入流 轉換爲字符輸入流
   OutputStreamWriter: 字節輸出流 轉換爲字符輸出流數據庫

  
 緩存流
  BufferedReader  BufferedWriter
  
  數據先存儲到緩衝區(8192字符大小),等緩衝區滿了再一次性輸出。
  
 裝飾者模式
  好比二次開發的時候,發現原來的工具類功能不夠強大,可是又不想改變原來的代碼,就能夠用
  裝飾者模式來加強原來的功能。
  
  特色:
      1) 裝飾對象和真實對象有相同的接口。
   這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互。
  (2) 裝飾對象包含一個真實對象的引用(reference)
  (3) 裝飾對象接受全部來自客戶端的請求。它把這些請求轉發給真實的對象。
  (4) 裝飾對象能夠在轉發這些請求之前或之後增長一些附加功能。
   這樣就確保了在運行時,不用修改給定對象的結構就能夠在外部增長附加的功能。
   
  裝飾者模式簡單示例:數組

public interface Car {
    //車啓動時 功能
    public void run(); 
}
public class BMW1 implements Car{//這是寶馬一代

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("最高時速200km/h");//只有這一個功能
    }
}
public class BMW2 implements Car{//這是寶馬2代
    
    private BMW1 bm1;
    
    public BMW2(BMW1 bm1){
        this.bm1=bm1;
    }

    @Override
    public void run() {//加強了故障檢測和故障排除功能
        // TODO Auto-generated method stub
        System.out.println("故障檢測");
        bm1.run();
        System.out.println("故障排除");
        
    }

}
public class Go {
    
    public static void main(String[] args) {
        //真實的對象
        BMW1 bm1=new BMW1();
        
        //裝飾對象
        BMW2 bm2=new BMW2(bm1);
        
        bm2.run();
    }

}

對象流
  ObjectOutputStream  和  ObjectInputStream
   
  注意存儲的對象要實現Serializable緩存

實現Serializable  做用:
 
     標記Person  是可序列化的 
       對象 能夠存儲到文件中  也能夠經過網絡進行傳輸
   空接口:  名稱:  標記型的接口 
            Serializable  標記型接口之一
         表明: 對象可持久化的(對象保存到文件中了)
   
  示例 :網絡

public class Person implements Serializable{
    
    private String name;
    private int age;
    private String adgress;
    
    public Person(String name,int age,String adgress){
        this.name=name;
        this.age=age;
        this.adgress=adgress;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", adgress=" + adgress
                + "]";
    }

}
public class Test4 {
    
    public void f1() throws Exception{
        Person p1=new Person("張三",20,"上海");
        
        ObjectOutputStream objOut=new ObjectOutputStream(new FileOutputStream("d:/a.txt"));
        
        objOut.writeObject(p1);
        
        objOut.flush();
        objOut.close();
    }
    
    public void f2() throws Exception{
        ObjectInputStream objIn=new ObjectInputStream(new FileInputStream("d:/a.txt"));
        
        Person p1=(Person) objIn.readObject();
        
        System.out.println(p1);
    }
    
    public static void main(String[] args) throws Exception{
        
        Test4 t=new Test4();
        
        t.f1();
        t.f2();
        
    }

}

淺克隆和深克隆
  淺克隆:學生時 引用的老師teacher也被克隆了  稱爲 淺克隆
   
   克隆一個對象:要求被克隆的對象 實現一個接口  Cloneable
   
   Cloneable 也是一個標記型接口: 標記經過對象建立的類 能夠被克隆
   
   被克隆對象要重寫clone() 方法
  ide

public class Student implements Cloneable{
    
    private int age;
    private String name;
    private Teacher teacher;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }

}
public class Teacher {
    
    private int age;
    private String name;
    private ArrayList<Student> student;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public ArrayList<Student> getStudent() {
        return student;
    }
    public void setStudent(ArrayList<Student> student) {
        this.student = student;
    }
    public Teacher(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

}
public class Go {
    
    public static void main(String[] args) throws Exception {
        Student s1=new Student(20,"張三");
        Student s2=new Student(21,"李四");
        
        Teacher t=new Teacher(34,"陳老師");
        
        //創建學生和老師之間的聯繫
        s1.setTeacher(t);
        s2.setTeacher(t);
        ArrayList<Student> list=new ArrayList<Student>();
        list.add(s1);
        list.add(s2);
        t.setStudent(list);
        
        Student s1Clone=(Student) s1.clone();
        
        System.out.println(s1==s1Clone);
    }

}

 


  深克隆:學生s1 引用的老師teacher沒有被克隆  稱爲 深克隆
   要用到對象流  只須要把學生保存到文件中,讀取出來後,與之相關聯的老師也被克隆了工具

public class Student implements Serializable{
    
    private int age;
    private String name;
    private Teacher teacher;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Student(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

}
public class Teacher implements Serializable{
    
    private int age;
    private String name;
    private ArrayList<Student> student;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public ArrayList<Student> getStudent() {
        return student;
    }
    public void setStudent(ArrayList<Student> student) {
        this.student = student;
    }
    public Teacher(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
}
public class Go {
    
    public static void main(String[] args) throws Exception {
        Student s1=new Student(20,"張三");
        Student s2=new Student(21,"李四");
        
        Teacher t=new Teacher(34,"陳老師");
        
        //創建學生和老師之間的聯繫
        s1.setTeacher(t);
        s2.setTeacher(t);
        ArrayList<Student> list=new ArrayList<Student>();
        list.add(s1);
        list.add(s2);
        t.setStudent(list);
        
        //用對象流 把s1保存到文件中
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("d:/a.txt"));
        
        oos.writeObject(s1);
        
        oos.flush();
        oos.close();
        
        ObjectInputStream oin=new ObjectInputStream(new FileInputStream("d:/a.txt"));
        
        Student s3=(Student) oin.readObject();
        oin.close();
        System.out.println(s1==s3);
        System.out.println(s1.getTeacher()==s3.getTeacher());
      }

}

properties:map集合下面的子類  是以文件的形式進行存儲的
 
  做用: 通常是用來配置文件  好比存儲 用戶名  密碼   java鏈接數據庫參數
 
  properties 存儲的形式: username="張三"   password="123456"this

public class Test6 {
    
    public static void main(String[] args) throws Exception {
        Properties pro=new Properties();
        File file=new File("user.properties");
        FileInputStream in=new FileInputStream(file);
        
        pro.load(in);//從user.properties中把鍵值對加載進來
        
        String name=pro.getProperty("username");
        String pass=pro.getProperty("password");

        System.out.println(name+"   "+pass);
    }

}

 

 

題目一:從一個文檔讀取文件內容,輸出到控制檯。spa

public static void main(String[] args) throws Exception {
        File file=new File("D:/a.txt");
        FileInputStream in=new FileInputStream(file);
        int len=0;
        byte[] by=new byte[1024];
        while((len=in.read(by))!=-1){
            String s=new String(by, 0, len);
            System.out.print(s);
        }
        
    }
View Code
相關文章
相關標籤/搜索