私のjavaの道を記録します——day 15(周更)

5259 ワード

day 2-IO流(下)
  • ディレクトリコピー
  • RandomAccessFile
  • オブジェクトシーケンス化
  • ディレクトリコピー
    package com.softeem.example;
    ​
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    ​
    public class FileUtils {
    ​
        /**
         *     
         * @param source     
         * @param dir     
         * @throws IOException 
         */
        public void fileCopy(File source,File dir) throws IOException{
            //                  File  
            File target = new File(dir,source.getName());
            //            
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
            //          
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(target));
            //       
            byte[] b = new byte[1024];
            //            
            int len = 0;
            while((len = bis.read(b)) != -1){
                bos.write(b, 0, len);
            }
            bos.close();
            bis.close();
        }
        
        /**
         *       
         * @param sourceDir    
         * @param targetDir     
         * @throws IOException 
         */
        public void dirCopy(File sourceDir,File targetDir) throws IOException{
            targetDir = new File(targetDir,sourceDir.getName());
            if(!targetDir.exists()){
                //    
                targetDir.mkdirs();
            }
            //          
            File[] files = sourceDir.listFiles();
            if(files != null){
                for(File f:files){
                    if(f.isFile()){
                        //    
                        fileCopy(f, targetDir);
                    }else{
                        //  
                        dirCopy(f, targetDir);
                    }
                }
            }
        }
        
        
        public static void main(String[] args) throws IOException {
            File dir1 = new File("d:/fileTest");
            File dir2 = new File("d:/targetFile");
            new FileUtils().dirCopy(dir1, dir2);
        }
    }
    ​

    RandomAccessFileクラス
    オブジェクトのシーケンス化
    オブジェクトシーケンス化は、ファイルまたは各種の他の入出力装置にjavaオブジェクトを格納するためのメカニズムであり、シーケンス化構造を実現したオブジェクトを指定した出力源に格納することによって、オブジェクトデータを完全に保存することができる.オブジェクトシーケンス化メカニズムは、一般的に、大規模なプロジェクトで使用する必要があるオブジェクトデータをキャッシュするために、キャッシュ技術によく使用されます.JAvaでのオブジェクトのシーケンス化には、通常2つの方法があります.
  • Serializableインタフェース
  • を実装
  • Externalizableインタフェース
  • を実現
    オブジェクトのシーケンス化を完了するには、次の手順に従います.
  • シーケンス化を完了する必要があるオブジェクトに対応するクラスは、Serializableインタフェース
  • を実装する必要がある.
  • オブジェクト出力ストリームを介して指定する出力ソース(ファイル、ネットワーク)にオブジェクトを格納する(ObjectOutputStreamを介して)
  • .
    ファイルまたは他の入出力デバイスのjavaオブジェクトを読み込む必要がある場合は、ObjectInputStreamでオブジェクトの逆シーケンス化を完了できます.
    サンプルコード:
    Player.java
    package com.softeem.seri;
    ​
    import java.io.Serializable;
    ​
    /**
     *    :   java                  ObjectOutputStream
     *     :              java   ObjectInputStream
     * @author mrchai
     *
     */
    public class Player implements Serializable{
    ​
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String nickName;
        private int level;
        private int power;
        private int x;
        private int y;
        
        public String getNickName() {
            return nickName;
        }
        public void setNickName(String nickName) {
            this.nickName = nickName;
        }
        public int getLevel() {
            return level;
        }
        public void setLevel(int level) {
            this.level = level;
        }
        public int getPower() {
            return power;
        }
        public void setPower(int power) {
            this.power = power;
        }
        public int getX() {
            return x;
        }
        public void setX(int x) {
            this.x = x;
        }
        public int getY() {
            return y;
        }
        public void setY(int y) {
            this.y = y;
        }
    }

    Client.java
    public class Client {
    ​
        public static void main(String[] args) throws IOException, ClassNotFoundException {
            
            Player p = new Player();
            p.setNickName("    ");
            p.setLevel(23);
            p.setPower(56000);
            p.setX(289);
            p.setY(335);
            
    //      //     
    //      OutputStream os = new FileOutputStream("role.dat",true);
    //      //              
    //      ObjectOutputStream oos  = new ObjectOutputStream(os);
    //      oos.writeObject(p);
    //      oos.close();
            
            //      
            InputStream is = new FileInputStream("role.dat");
            ObjectInputStream ois = new ObjectInputStream(is);
            Object obj = ois.readObject();
            System.out.println(obj);;
            
        }
    ​
    }
    ​

     
     
     
     
     
    さぎょう
  • ファイルブレークポイントコピーツール(ファイルコピーを行う場合、電源オフ、システムクラッシュなどの異常な状況により、ファイルコピーができなくなり、システムが回復し、再コピーする場合、前回の異常終了位置からコピーを継続して完了し、重複コピーを減らし、コピー時間を速める.推奨:RandomAccessFile)
  • ファイルストレージ(オブジェクトシーケンス化)に基づいて、口座クラス、収支クラスを含む個人財務管理システムを完了します.クラスには以下の属性が含まれています.アカウントクラス:(ユーザー名、パスワード、ニックネーム、アカウント残高)収支クラス:(取引番号、変動金額、収支タイプ、変更時間、所属口座、注釈)フィールド説明:取引番号はシステム時間に基づいて直接システム時間(ミリ秒まで正確)、収支タイプ(0:支出、1:収入)、所属口座には関連口座情報(収支情報が変化すると、所属口座残高が変更される)が必要であり、備考情報の任意記入(例えば、野菜購入支出-支出、宝くじ当選-収入)は以下の機能を完成することを要求する.
  • 1.口座開設(新規口座)
  • 2.ログインアカウント
  • 3.新規取引(収益または支出)
  • 4.指定した口座の1ヶ月以内の取引記録を照会し、1ヶ月以内の総支出と総収入
  • を表示します.
  • 5.指定口座収支比
  • を算出する