Day14文件的相關(guān)操作及demo

1.相關(guān)概念

讀取文件的 內(nèi)容
I O流
流的方向:參考的是自己的內(nèi)存空間
輸出流:從內(nèi)存空間將數(shù)據(jù)寫(xiě)到外部設(shè)備(磁盤(pán)\硬盤(pán)\光盤(pán))
輸入流:將外部數(shù)據(jù)寫(xiě)到內(nèi)存中
流:統(tǒng)一管理數(shù)據(jù)的寫(xiě)入和讀取 開(kāi)發(fā)者只需要將內(nèi)存里面的數(shù)據(jù)寫(xiě)到 流里面
輸出流:開(kāi)發(fā)者只需要 將內(nèi)存里面的數(shù)據(jù)寫(xiě)到流里面
輸入流;或者從流里面讀取數(shù)據(jù)
輸出流:OutputStream字節(jié)流 Writer字符流
輸入流:InputStream字節(jié)流 Reader 字符流
I/O流對(duì)象 不屬于內(nèi)存對(duì)象 需要自己關(guān)閉
Outputtream和InputStream是抽象類(lèi) 不能直接使用
FileOutputtream/FileInputStream
ObjectOutputtream/ObjectInputtream
FileWriter/FileReader

2.向文件寫(xiě)入數(shù)據(jù)

(1)字節(jié)流
1.創(chuàng)建文件輸出流對(duì)象

  FileOutputStream fos=new FileOutputStream(file);
   2.調(diào)用Writer方法寫(xiě)入
  byte[]text={'1','2','3','4'};
  fos.write(text);
  3疗我,操作完畢要關(guān)閉stream對(duì)象
  fos.close();

(2)字符流

  FileWriter fw=new FileWriter(file);
  char[] name ={'安','卓','開(kāi)','發(fā)'};
fw.write(name);
fw.close();

3.讀取內(nèi)容

FileInputStream fis=new FileInputStream(fi
byte[]name1=new byte[12];
int count=fis.read(name1);
fis.read(name1);
fis.close();
System.out.println(new String(name1));
FileReader fr=new FileReader(file);
char[] book=new char[4];
count=fr.read(book);
fr.close();
System.out.println(new String(book));

4.向一個(gè)文件里面 存一個(gè)對(duì)象

序列化
保存的對(duì)象必須實(shí)現(xiàn)Serializable接口
如果對(duì)象內(nèi)部還有屬性變量是其他類(lèi)的對(duì)象 那這個(gè)類(lèi)也必須實(shí)現(xiàn)Serializable 接口
(1)主程序里:

   //創(chuàng)建文件
String path ="/Android studio java/day/day1/src/main/java/swu/hsl/day8";
//path\\1.txt
File file=new File(path.concat("/1.txt"));
if(file.exists()==false){
    //不存在就創(chuàng)建
  //  try {
        file.createNewFile();
  // }catch (IOException e){
  //   System.out.println("IO異常了");
  // }
}
   Dog wc=new Dog();
   wc.name="旺財(cái)";
 Person xw=new Person();
 xw.age=20;
 xw.name=("小王");
   xw.dog=wc;
 OutputStream os =new FileOutputStream(file);
 ObjectOutputStream oos=new ObjectOutputStream(os);
 oos.writeObject(xw);
 oos.close();
      //從文件里面讀取一個(gè)對(duì)象
 InputStream is =new FileInputStream(file);
 ObjectInputStream ois=new ObjectInputStream(is);
   Person  xw = (Person)ois.readObject();
     System.out.println(xw.name+""+xw.age+xw.dog.name);
 ois.close();

(2)定義的類(lèi):

public class Person implements Serializable {
    String name;
    int age;
    Dog dog;
}
 class  Dog implements Serializable{
    String name;
}

5.將一個(gè)文件copy到另外一個(gè)位置

long start=System.currentTimeMillis();
        String sourcepath="C:\\Users\\Day\\Desktop\\鬼刀\\QQ圖片20190523212913.jpg";
        String despath="C:\\Users\\Day\\Desktop\\word\\3.jpg";
        InputStream is =new FileInputStream(sourcepath);
        BufferedInputStream bis =new BufferedInputStream(is);
        OutputStream os=new FileOutputStream(despath);
        BufferedOutputStream bos=new BufferedOutputStream(os);
        byte[]in=new byte[1024];
        while(true) {
            int count = bis.read(in);
            if(count!=-1){
                //讀取到內(nèi)容了
                //將這次讀取到的內(nèi)容寫(xiě)入目標(biāo)文件
                bos.write(in,0,count);
            }else {
                break;
            }
        }
bis.close();
        bos.close();
long end=System.currentTimeMillis();
        System.out.println(end-start);

6.密碼解鎖的demo

(1)

public class Myclass {

        public static void main(String[] args){
            boolean logined =false;

            //判斷是否已經(jīng)登錄
            String password = FileOperation.instance.password;
            if (password != null){
                logined = true;
            }

            //提示用戶(hù)操作
            String alert;
            if (logined) {
                alert = "請(qǐng)輸入密碼";
            } else {
                alert = "請(qǐng)?jiān)O(shè)置密碼";
            }
            System.out.println(alert);

            String firt = null;
            int wrongTime = 3;
            while (wrongTime > 0) {
                //接收用戶(hù)輸入
                Scanner scanner = new Scanner(System.in);
                String inputPassword = scanner.next();

                //判斷操作
                if (logined) {
                    //已經(jīng)登陸過(guò) 直接比較
                    if (password.equals(inputPassword)) {
                        System.out.println("解鎖成功");
                        break;
                    } else {
                        System.out.println("解鎖失敗 請(qǐng)重新輸入");
                        wrongTime--;
                    }
                }else{
                    //沒(méi)有登陸過(guò) 在設(shè)置密碼
                    //判斷是設(shè)置密碼的第一次還是第二次
                    if (firt == null){
                        //第一次  保存第一次輸入的密碼
                        firt = inputPassword;
                        System.out.println("請(qǐng)確認(rèn)密碼 ");
                    }else{
                        //第二次 比較兩次輸入的密碼是否相同
                        if (firt.equals(inputPassword)){
                            System.out.println("設(shè)置密碼成功");
                            //保存設(shè)置的密碼
                            FileOperation.instance.save(firt);
                            break;
                        }else{
                            System.out.println("兩次密碼不一致 請(qǐng)重新設(shè)置密碼:");
                            firt = null;
                            wrongTime--;
                        }
                    }


                }
                scanner.nextLine();
            }
        }

    }

(2)

public class FileOperation {
    public  static  final String PATH="C:\\Users\\Day\\Desktop\\word\\1.txt";

    String password;

        public static final FileOperation instance = new FileOperation();

        private FileOperation(){
            try {
                load();
            }catch (IOException e){

            }
        }

        public void load() throws IOException {
            FileInputStream fis = new FileInputStream(PATH);

            byte[] pwd = new byte[4];

            int count = fis.read(pwd);

            if (count == -1){
                password = null;
            }else{
                password = new String(pwd);
            }
            fis.close();
        }

        public void save(String password){
            try {
                FileOutputStream fos = new FileOutputStream(PATH);
                fos.write(password.getBytes());
                fos.close();
            } catch (IOException e){
                System.out.println("io異常");
            }
        }
    }

7.心得體會(huì)

今天關(guān)于文件的學(xué)習(xí)還是能夠吸收恢共,下來(lái)過(guò)后得好好把上課講的知識(shí)穩(wěn)固一下加深影響,這一節(jié)的內(nèi)容很重要不能知其然不知其所以然引矩,繼續(xù)加油 前路仍漫漫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惠况,一起剝皮案震驚了整個(gè)濱河市琐谤,隨后出現(xiàn)的幾起案子进苍,更是在濱河造成了極大的恐慌,老刑警劉巖熊楼,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹娄,死亡現(xiàn)場(chǎng)離奇詭異能犯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)犬耻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)踩晶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人枕磁,你說(shuō)我怎么就攤上這事渡蜻。” “怎么了计济?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵茸苇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沦寂,道長(zhǎng)学密,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任传藏,我火速辦了婚禮腻暮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毯侦。我一直安慰自己哭靖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布叫惊。 她就那樣靜靜地躺著款青,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霍狰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,798評(píng)論 1 290
  • 那天饰及,我揣著相機(jī)與錄音蔗坯,去河邊找鬼。 笑死燎含,一個(gè)胖子當(dāng)著我的面吹牛宾濒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屏箍,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绘梦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赴魁?” 一聲冷哼從身側(cè)響起卸奉,我...
    開(kāi)封第一講書(shū)人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颖御,沒(méi)想到半個(gè)月后榄棵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年疹鳄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拧略。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘪弓,死狀恐怖垫蛆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腺怯,我是刑警寧澤袱饭,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站瓢喉,受9級(jí)特大地震影響宁赤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栓票,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一决左、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧走贪,春花似錦佛猛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逃沿,卻和暖如春婴渡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凯亮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工边臼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人假消。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓柠并,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親富拗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臼予,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容