java磁盤操作與IO流(序列化、Properties類)

目錄

一、磁盤操作

1、File類:

(1)創建File對象:

(2)獲取文件信息:

(3)判斷文件

(4)刪除文件

(5)創建文件:

2、Files工具類:

(1)字符操作:

(2)字節操作:

二、IO流:

? ? ? ? ?在 Java 中,IO(Input/Output)流是用于處理設備間數據傳輸的機制,比如文件讀寫、網絡通信等。IO 流按不同維度可分為多種類型,以下是其核心分類及常用操作示例:

1、IO流的概念:

(1) I 表示Input ,把硬件文件的數據讀入到內存的過程,稱之輸入,負責讀。

(2)O表示output ,把內存中的數據寫出到硬盤文件的過程 稱之輸出 負責寫

2、字節操作(字節流):操作最小單元為字節,可以包含音頻視頻圖片

(1)輸入流:InputStream(讀):常用實現類:FileInputStream類、BufferedInputStream類、ObjectInputStream類(反序列化)等。

(1.1)FileInputStream類:基于磁盤中字節內容的輸入流。

(1.2)?BufferedInputStream類:帶有緩沖區的輸入流。

(1.3)ObjectInputStream類:對象輸入流,進行反序列化操作

(1.4)常用方法:

(2)輸出流:OutputStream(寫):常用實現類:FileOutStream類、BufferedOutStream類、ObjectOutputStream類(序列化)等。

(2.1)FileOutStream類:基于磁盤中字節內容的輸出流

(2.2)BufferedOutStream類:帶有緩沖區的輸入流:

(2.3)ObjectOutputStream類:對象輸出流,進行序列化操作

(2.4)常用方法:

3、字符操作(字符流):操作最小單位:txt文本文件或者java文件

(1)輸出流:Writer(寫):常用實現類:FileWriter類、BufferedWriter類

(1.1)FileWriter類:也帶有緩沖區:緩沖區長度為8192

常用方法:

(1.2)BufferedWriter類:帶緩沖區的流,與FileWriter相差不大,多了一個bw.newLine()方法自帶換行方法

(2)輸入流:Reader(讀):常用實現類:FileReader類、BufferedReader類、

(2.1)FileReader類:

(2.2)常用方法:

(2.3)BufferedReader類:多了一個String readLine( )方法,讀取一整行,讀取至末尾,返回null

三、Serializable序列化與反序列化:

1、序列化:對象--->二進制

(1)如果想要讓某個對象進行序列化操作,要求類必須要實現Serializable接口 。

(2)在進行序列化和反序列化時要求類的信息不能有任何的改動,否則會出異常。

(3)如果不能確保類不發生任何變動,則可以加序列化碼(成員常量)保證類信息一致

(4)如果不想某個成員變量序列化出去,可以使用transient進行成員變量的修飾 (

(5)要求成員變量也標題四要可序列化

2、反序列化:二進制--->對象

四、Properties類:Properties extends Hashtable,實例化對象一鍵值對存儲。

1、常用方法:

(1)Object setProperty(String key, String value)給對象賦值

(2)getProperty(String key)獲取鍵對應的值

(3)getProperty(String key, String defaultValue)獲取鍵對應的值,沒有該鍵,返回默認值

(4)SetstringPropertyNames()獲取所有的鍵

2、將輸出流OutputStram和Properties對象p1對象結合,進行p1對象的輸出:

3、將輸入流InputStream獲取到的所有信息傳遞給p1對象

4、Class對象的getResourceAsStream()可以從classpath中讀取指定資源:


一、磁盤操作

? ? ? ? ? java.io.File 類是java提供的針對磁盤中文件和目錄對象的一個類。代表操作系統的文件(文件、文件夾)。

1、File類:

(1)創建File對象:

(1.1)public File(String pathname):以pathname為路徑創建File對象,可以是絕對路徑或者相對路徑.

(1.2)public File(String parent,String child):以parent為父路徑,child為子路徑創建File對象

(1.3)public File(File parent,String child):根據一個父File對象和子文件路徑創建File對象

        File f1 = new File("D:\\IoTest\la.txt");--傳入一個string path路徑File f2 = new File("D:\|IOTest","a.txt");//傳入兩個路徑,分別時父路徑和子路徑File f3 = new File(new File( "D:\\IoTest"), "a.txt"); //傳入兩個路徑第一個為File類型的對象,第二個為子路徑

(2)獲取文件信息:

(2.1)?public String getName() :獲取文件的名稱,帶后綴

(2.2)?public long length() :獲取文件長度(即:字節數---真實的大小)。不能獲取目錄的長度--僅表示當前操作系統為保存目錄所涉及的長度。

(2.3)?public long lastModified() :獲取最后一次的修改時間,毫秒值使用new Date(f1.lastModified());// 返回的是當天時間

package com.yuan.file;import java.io.File;
import java.util.Date;public class Demo01 {public static void main(String[] args) {//存在的目錄路徑// 小貼士:// 1.一個File對象代表指向硬盤中的一個文件或者目錄路徑(舉例,只代表此路徑,不代表里面的內容。舉例:地址不是房子,File對象指向地// 2.無論該路徑下是否存在文件或者目錄,都不影響File對象的創建。File f1 = new File( "D:\\IoTest");System.out.println(f1);///存在的文件路徑File f2 = new File( "D:\\IoTest\\a.txt");System.out.println(f2);//不存在的目錄路徑File f3 = new File( "D:\\IoTest\\aaa");System.out.println(f3);//不存在的文件路徑File f4 = new File( "D:\\IoTest\\a.jpg");System.out.println(f4);String str="文件名是:%s 文件大小是:%d  文件最后一次修改時間是:%s\n";//public string getName():獲取文件的名稱,帶后綴//public long length():獲取文件長度(即:字節數---真實的大小)。不能獲取目錄的長度--僅表示當前操作系統為保存目錄所涉及的長度//public long lastModified():獲取最后一次的修改時間,毫秒值System.out.printf(str,f1.getName(),f1.length(),new Date(f1.lastModified()));System.out.printf(str,f2.getName(),f2.length(),new Date(f2.lastModified()));System.out.printf(str,f3.getName(),f3.length(),new Date(f3.lastModified()));System.out.printf(str,f4.getName(),f4.length(),new Date(f4.lastModified()));}
}

(2.4)public String getAbsolutePath():獲取文件的絕對路徑

(2.5)?public String getPath() :獲取路徑,返回定義文件時使用的路徑

(2.6)public String getCannoicalPath() 獲取規范路徑

package com.yuan.file;import java.io.File;
import java.io.IOException;public class Demo02 {public static void main(String[] args) throws IOException {File f1 = new File(new File( "D:\\IoTest"), "a.txt");System.out.println("文件絕對路徑"+f1.getAbsolutePath());System.out.println("文件使用路徑"+f1.getPath());System.out.println("文件規范路徑"+f1.getCanonicalPath());  //編譯時異常//.表示當前路徑 .. 表示當前路徑的上一層路徑File f2 = new File(".\\a.txt");System.out.println("文件絕對路徑"+f2.getAbsolutePath());System.out.println("文件使用路徑"+f2.getPath());System.out.println("文件規范路徑"+f2.getCanonicalPath());  //編譯時異常}
}

(2.7)public String[] list() :獲取指定目錄下的所有文件或者文件目錄的名稱數組---注意返回類型

(2.8)public File[] listFiles() :獲取指定目錄下的所有文件或者目錄的File數組----返回時File

  public static void main(String[] args) {//查看目錄下的文件及文件夾//public String[] list();獲取指定目錄下的文件或者文件目錄的名稱數組File f1=new File("D:\\IoTest");String[] names=f1.list();System.out.println(Arrays.toString(names));//public File[] listFiles():獲取指定目錄下的所有文件或者目錄的File數組--返回File路徑對象File[] files=f1.listFiles();System.out.println(Arrays.toString(files));}

(3)判斷文件

(3.1)?public boolean exists() :判斷是否存在

(3.2)?public boolean isDirectory():判斷是否是目錄

(3.3)public boolean isFile() :判斷是否是文件

package com.yuan.file;import java.io.File;public class Demo03 {public static void main(String[] args) {//存在的文件和目錄File f1 = new File("D:\\IoTest");File f2 = new File( "D:\\IoTest\\a.txt");//不存在的文件和目錄File f3 = new File( "D:\\IoTest\\aaa");File f4 = new File(  "D:\\IoTest\\a.jpg");//判斷是否存在String str ="【%s】是否存在%s,是否是文件%s,是否是目錄%s\n";//public boolean isFile():判斷是否是文件System.out.printf(str,f1.getName(),f1.exists(),f1.isFile(),f1.isDirectory());System.out.printf(str,f2.getName(),f2.exists(),f2.isFile(),f2.isDirectory());System.out.printf(str,f3.getName(),f3.exists(),f3.isFile(),f3.isDirectory());System.out.printf(str,f4.getName(),f4.exists(),f4.isFile(),f4.isDirectory());}
}

(3.4)public boolean canRead() :判斷是否可讀

(3.5)public boolean canWrite() :判斷是否可寫

(3.6)?public boolean isHidden() :判斷是否隱藏

package com.yuan.file;import java.io.File;public class Demo04 {public static void main(String[] args) {File f1=new File("D\\IoTest\\a.txt");System.out.println("是否可讀"+f1.canRead());System.out.println("是否可寫"+f1.canWrite());System.out.println("是否隱藏"+f1.isHidden());}
}

(4)刪除文件

(4.1)public boolean delete():刪除此抽象路徑名表示的文件或者文件夾

? ? ? ? ?注意 :delete方法只刪除文件和空文件夾,是直接刪除不走回收站

public class Demo05 {public static void main(String[] args) {//delete 方法刪除后不進回收站File f1=new File("D:\\IoTest\\b.txt");File f2=new File("D:\\IoTest\\fileStudy");//刪除文件時,要求文件必須存在才能進行刪除boolean b1 =f1.delete();System.out.println("f1是否刪除成功:"+b1);//只能刪除存在的空目錄boolean b2=f2.delete();System.out.println("f2是否刪除成功:"+b2);}
}

(5)創建文件:

(5.1)public boolean createNewFile():創建文件。若文件存在,則不創建,返回false

(5.2)public boolean mkdir() :創建文件目錄。如果此文件目錄存在,就不創建了。如果此文件目錄的上層目錄不存在,也不創建。

(5.3)public boolean mkdirs() :創建文件目錄。如果上層文件目錄不存在,一并創建

public class Demo06 {public static void main(String[] args) throws IOException {File f1 = new File("D:\\IoTest\\b.txt");File f2 = new File("D:\\IoTest\\資料");File f3 = new File("D:\\IoTest\\aaa\\資料");//1.創建文件createNewFile(),文件路徑存在,文件不存在的時候為trueboolean b1=f1.createNewFile();System.out.println("創建f1對象是否成功:"+b1);//2.創建文件夾,當文件夾不存在,且父路徑存在的時候就可以創建boolean b2 =f2.mkdir();System.out.println("創建f2對象是否成功:"+b2);//3.創建文件來,如果父路徑不存在,則一并創建boolean b3 =f3.mkdirs();System.out.println("創建f3對象是否成功:"+b3);}
}

2、Files工具類:

? ? ? ? ?在 Java NIO(New IO)中,java.nio.file.Files?是一個非常實用的工具類,提供了大量靜態方法用于操作文件和目錄,包括創建、刪除、復制、移動、讀取、寫入等操作。它通常與?Path?接口配合使用,是處理文件系統的重要工具。以下是?Files?工具類的一些常用方法:

(1)字符操作:

(1.1)List<String> list readAllLine(Path path) ?按行讀取指定路徑中的內容

(1.2)?write(Path path, List<String> list) 寫入字符到指定的路徑

public class FilesReadWriteExample {public static void main(String[] args) {// 定義文件路徑Path filePath = Paths.get("example.txt");try {// 1. 寫入內容到文件List<String> contentToWrite = new ArrayList<>();contentToWrite.add("第一行內容");contentToWrite.add("第二行內容");contentToWrite.add("第三行內容");// 使用write方法寫入列表內容到文件Files.write(filePath, contentToWrite);System.out.println("文件寫入成功!");// 2. 從文件按行讀取內容List<String> readLines = Files.readAllLines(filePath);System.out.println("\n文件讀取內容如下:");for (String line : readLines) {System.out.println(line);}} catch (IOException e) {System.out.println("文件操作出錯:" + e.getMessage());e.printStackTrace();}}
}

(2)字節操作:

(2.1)byte[] readAllBytes(Path path) ?讀取文件中的所有字節。?

public class Demo01 {public static void main(String[] args) throws IOException {Path p1=new File("D:\\IoTest\\a.txt").toPath();//byte[] readAllBytes(Path path) 讀取文件中的所有字節byte[] bytes= Files.readAllBytes(p1);System.out.println(Arrays.toString(bytes));//字符讀的方式: 只能讀取純文本類型List<String> list=Files.readAllLines(p1);System.out.println(list);}
}

(2.2)?Path write(Path path, byte[] bytes) 寫入字節到指定的路徑

public class Demo02 {public static void main(String[] args) throws IOException {Path p1 = new File( "D:\\IoTest\\a.txt").toPath();//寫 Path write(Path path,byte[] bytes) 寫入字節到指定的路徑byte[] bytes="我本將心向明月".getBytes();Files.write(p1,bytes);ArrayList<String> list =new ArrayList<>();for (int i =0; i <30 ; i++) {list.add(UUID.randomUUID().toString());}// write(Path path,List<String>list)寫入字符到指定的路徑Files.write(p1,list, StandardOpenOption.APPEND);System.out.println("寫出結束");}
}

二、IO流:

? ? ? ? ?在 Java 中,IO(Input/Output)流是用于處理設備間數據傳輸的機制,比如文件讀寫、網絡通信等。IO 流按不同維度可分為多種類型,以下是其核心分類及常用操作示例:

1、IO流的概念:

(1) I 表示Input ,把硬件文件的數據讀入到內存的過程,稱之輸入,負責讀。

(2)O表示output ,把內存中的數據寫出到硬盤文件的過程 稱之輸出 負責寫

2、字節操作(字節流):操作最小單元為字節,可以包含音頻視頻圖片

(1)輸入流:InputStream(讀):常用實現類:FileInputStream類、BufferedInputStream類、ObjectInputStream類(反序列化)等。

(1.1)FileInputStream類:基于磁盤中字節內容的輸入流。

構造方法:

? ? ? ? ? ? ? ? ?1.FileInputStream(File file); ? 通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件系統中的 File對象 file命名。

? ? ? ? ? ? ? ? ? 2、FileInputStream(String name) ? ? 通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件系統中的路徑名 name命名。

public class Demo01 {public static void main(String[] args) throws FileNotFoundException {//注意路徑: 一定是一個文件路徑,路徑一定要存在,如果不存在則出異常//public  FileInputStream(String name)InputStream is1=new FileInputStream("D:\\IoTest\\a.txt");System.out.println(is1);  //獲取輸入流對象//FileInputStream(File file)InputStream is2=new FileInputStream(new File("D:\\IoTest\\a.txt"));System.out.println(is2);}
}
(1.2)?BufferedInputStream類:帶有緩沖區的輸入流。

? ? ? ? 作用:沒有緩沖區,就好像逛超市沒有推車,一次只拿一樣東西區結賬,緩沖區可以暫時放一堆數據到滿為止

(1.3)ObjectInputStream類:對象輸入流,進行反序列化操作
(1.4)常用方法:

(1.4.1)int read():一個字節一個字節讀取,賦值給返回值,植脂末未返回-1

(1.4.2)int read(byte b[])每次讀取N個字節,將字節放到字節數組中,讀取到末尾返回值-1

(1.4.3)public void close() :關閉此輸入流,并釋放與此流相關聯的任何系統資源。?原因:在IO流進行操作時,當前IO流回占用到一定的內存,由于系統資源寶貴,因此在進行IO操作結束后,調用close方法關閉流,從而釋放資源。

package com.yuan.inputstream;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class Demo02 {public static void main(String[] args) throws IOException {InputStream is = new FileInputStream("D:\\IoTest\\a.txt");//1、int read()  一個字節一個字節讀取,賦值給返回值,植脂末未返回-1
//        int data1 = is.read();
//        System.out.println(data1);
//        int data2 = is.read();
//        System.out.println(data2);
//        int data3 = is.read();
//        System.out.println(data3);
//        int data4 = is.read();
//        System.out.println(data4);
//
//        int data;
//        while ((data = is.read()) != -1) {
//            System.out.println((char) data);
//        }//2.int read(byte b[])每次讀取N個字節,將字節放到字節數組中,讀取到末尾返回值-1byte[] bytes = new byte[10];//存放每次讀取到的字節信息int len;//每次讀取的長度1/讀取操作while ((len = is.read(bytes)) != -1) {System.out.print("讀取到的長度為:" + len + "讀到的內容:" + new String(bytes, 0, len)+"\n");}is.close();}
}

(2)輸出流:OutputStream(寫):常用實現類:FileOutStream類、BufferedOutStream類、ObjectOutputStream類(序列化)等。

(2.1)FileOutStream類:基于磁盤中字節內容的輸出流

構造方法:

public class Demo04 {public static void main(String[] args) throws FileNotFoundException {//1、字節輸出流路徑一定要是一個文件路徑//2、輸出流文件對象可以不存在,的但是父路徑一定要存在//FileOutputStream(String name)如果路徑中有內容,會將路徑中的內容覆蓋掉OutputStream os=new FileOutputStream("D:\\IoTest\\b.txt");System.out.println(os);//FileOutputStream(File file)OutputStream os1=new FileOutputStream(new File("D:\\IoTest\\b.txt"));System.out.println(os1);}
}
(2.2)BufferedOutStream類:帶有緩沖區的輸入流:
(2.3)ObjectOutputStream類:對象輸出流,進行序列化操作
(2.4)常用方法:

(2.4.1)write(int b):寫入一個字節

(2.4.2)write(byte b[ ]):把這個b字節數組中的所有數據寫到關聯的設備中(設備包括文件、網絡或者其他任何地方)。

(2.4.3)write(byte b[], int off, int len):把數組b字節中的數據從下標off位置開始往出寫,共計寫len個元素
(2.4.4)public void close() :關閉此輸出流并釋放與此流相關聯的任何系統資源。close方法,當完成流的操作時,必須調用此方法,釋放系統資源。

public class Demo07 {public static void main(String[] args) {//使用追加寫的方式進行字書流的輸出,不會對文件信息進行覆蓋try (OutputStream os = new FileOutputStream( "D:\\IoTest\\a.txt",  true);BufferedOutputStream bos = new BufferedOutputStream(os);){//window換行號:r\n// linux換行:Ir// mac換行:nbos.write('a');//寫出一個字節信息bos.write("rin".getBytes());//寫出一個換行信息bos.write("我本將心向明月\r\n".getBytes());//寫出一個字節數組信息//獲取系統換行String str=System.lineSeparator();for(int i=0;i<5;i++) {String s1 = UUID.randomUUID().toString().substring(0, 8);bos.write((s1 + str).getBytes());}//bos.flush()://刪新緩沖流// bos.close();關閉流bos.write("站著還能睡著嗎".getBytes());}catch(Exception e) {e.printStackTrace();}}
}

3、字符操作(字符流):操作最小單位:txt文本文件或者java文件

(1)輸出流:Writer(寫):常用實現類:FileWriter類、BufferedWriter類

(1.1)FileWriter類:也帶有緩沖區:緩沖區長度為8192

構造方法:

(1.1.1)public FileWriter(String path);

(1.1.2)public FileWriter(File path);

(1.1.3)public FileWriter(String path,boolean append);

(1.1.4)?public FileWriter(File path,boolean append);

public class Demo01 {public static void main(String[] args) throws IOException {//字符//FileWriter(String filename)覆蓋寫Writer w1=new FileWriter("D:\\IoTest\\a.txt");System.out.println(w1);//FileWriter(File file)覆蓋寫Writer w2=new FileWriter(new File("D:\\IoTest\\a.txt"));System.out.println(w2);//FileWriter(String filename) 不覆蓋寫Writer w3=new FileWriter("D:\\IoTest\\a.txt",true);System.out.println(w3);//FileWriter(String filename) 不覆蓋寫Writer w4=new FileWriter("D:\\IoTest\\a.txt",true);System.out.println(w4);}
}
常用方法:

(1.1.5)void write(String str) ?寫出一整行

(1.1.6)?void newLine( ) ? ? 創建新行,輸出換行符(根據操作系統不同,輸出不同的換行符,windows是\r\n,Linux和Mac OS是\n)

public class Demo03 {public static void main(String[] args) {try (BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\IoTest\\c.txt"));){bw.write("你好");bw.newLine();// 自帶換行方法bw.write("白日依山盡",0,3);bw.newLine();bw.flush();//刷新bw.close();//關閉,用try-with-resource, 所以不用關了} catch (IOException e) {e.printStackTrace();}}
}
(1.2)BufferedWriter類:帶緩沖區的流,與FileWriter相差不大,多了一個bw.newLine()方法自帶換行方法

(2)輸入流:Reader(讀):常用實現類:FileReader類、BufferedReader類、

(2.1)FileReader類:

構造方法:

(2.1.1)public FileReader(String path);

(2.1.2)public FileReader(File path);

public class Demo01 {public static void main(String[] args) throws FileNotFoundException {//創建字符輸入流Reader r1=new FileReader("D:\\IoTest\\b.txt");System.out.println(r1);Reader r2=new FileReader(new File("D:\\IoTest\\b.txt"));System.out.println(r2);}
}
(2.2)常用方法:

(2.2.1)int read()讀取一個字符的數據,如果沒有數據則返回-1

(2.2.2)int read(char buf[]) ?讀取數據存入char數組中,返回讀取的長度,如果沒有數據則返回-1

(2.2.3)void close(); ? 關閉此流并釋放與此流相關聯的任何系統資源。

public class Demo02 {public static void main(String[] args) {try (Reader r1 = new FileReader("D:\\IOTest\\b.txt")) {// 讀取單個字符,返回字符對應碼表值,當為 -1 讀取結束int data = r1.read();System.out.println((char) data);// 循環讀取
//            int data;
//            while ((data = r1.read()) != -1) {
//                System.out.print((char) data);
//            }// int read(char buf[])  讀取數據存入 char 數組中,返回讀取的長度,如果沒有數據則返回 -1char[] chars = new char[10];int len;while ((len = r1.read(chars)) != -1) {System.out.print(new String(chars, 0, len));}} catch (IOException e) {e.printStackTrace();}}
}
(2.3)BufferedReader類:多了一個String readLine( )方法,讀取一整行,讀取至末尾,返回null

三、Serializable序列化與反序列化:

1、序列化:對象--->二進制

(1)如果想要讓某個對象進行序列化操作,要求類必須要實現Serializable接口 。
(2)在進行序列化和反序列化時要求類的信息不能有任何的改動,否則會出異常。
(3)如果不能確保類不發生任何變動,則可以加序列化碼(成員常量)保證類信息一致
(4)如果不想某個成員變量序列化出去,可以使用transient進行成員變量的修飾 (
(5)要求成員變量也標題四要可序列化
public class Person implements Serializable {private static final long serialVersionUID = 6710117445303992336L;private String name;private transient int age;private Money money;public Person(String name, int age, Money money) {this.name = name;this.age = age;this.money = money;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", money=" + money +'}';}
}// 注意:假設 Money 類也需要實現 Serializable 接口才能支持 Person 類的完整序列化,
// 這里補充 Money 類的示例實現(如果實際項目中有該類,需確保其正確實現)
class Money implements Serializable {private double Balance;private String bz;public Money(double balance, String bz) {Balance = balance;this.bz = bz;}
}
public class Demo01 {public static void main(String[] args) {// 序列化:對象->二進制// out// 反序列化:對象<-二進制try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("a.txt"));) {Person p1 = new Person("張三", 20, new Money(1768937, "人民幣"));// 寫出一個對象,序列化。將對象寫出到指定的文件中os.writeObject(p1);System.out.println("序列化完成");} catch (IOException e) {e.printStackTrace();}}
}

2、反序列化:二進制--->對象

public class Demo02 {public static void main(String[] args) {// 二進制-->對象// 輸入流try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));) {Object obj = ois.readObject();if (obj instanceof Person) {Person p1 = (Person) obj;System.out.println(p1);}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

四、Properties類:Properties extends Hashtable<Object,Object>,實例化對象一鍵值對存儲。

1、常用方法:

(1)Object setProperty(String key, String value)給對象賦值
(2)getProperty(String key)獲取鍵對應的值
(3)getProperty(String key, String defaultValue)獲取鍵對應的值,沒有該鍵,返回默認值
(4)Set<String> stringPropertyNames()獲取所有的鍵
public class Demo01 {public static void main(String[] args) {Properties p1=new Properties();//Object setProperty(String key, String value)給對象賦值p1.setProperty("姓名","張三");p1.setProperty("年齡","12");System.out.println(p1);//getProperty(String key)獲取鍵對應的值String name=p1.getProperty("姓名");System.out.println(name);//getProperty(String key, String defaultValue)獲取鍵對應的值,沒有該鍵,返回默認值String name1=p1.getProperty("姓名1","不知道");System.out.println(name1);//獲取所有的鍵Set<String> set=p1.stringPropertyNames();System.out.println(set);}
}

2、將輸出流OutputStram和Properties對象p1對象結合,進行p1對象的輸出:

public class Demo02 {public static void main(String[] args) throws IOException {Properties p1=new Properties();p1.setProperty("姓名","張三");p1.setProperty("年齡","12");p1.setProperty("性別","男");Writer w1=new FileWriter("b.txt");//將輸出流和p1對象結合,進行p1對象的輸出p1.store(w1,"helloWorld");w1.close();}
}

3、將輸入流InputStream獲取到的所有信息傳遞給p1對象

public class Demo03 {public static void main(String[] args) throws IOException {Properties p1=new Properties();Reader r1=new FileReader("b.txt");//將輸入流獲取放到的所有信息傳遞給p1對象p1.load(r1);Set<String> set=p1.stringPropertyNames();for (String s:set) {System.out.println(s+"__"+p1.getProperty(s));}}
}

4、Class對象的getResourceAsStream()可以從classpath中讀取指定資源:

public class Demo04 {public static void main(String[] args) throws IOException {//Class對象的getResourceAsStream()可以從classpath中讀取指定資源:InputStream is = Demo04.class.getResourceAsStream("/jdbc.properties");Properties p1 = new Properties();p1.load(is);//輸入流和p1對象結合//打印鏈值對for (String key : p1.stringPropertyNames()) {System.out.println(key + "__" + p1.getProperty(key));}is.close();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90937.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90937.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【WPF】WPF Prism 開發經驗總結:菜單命令刪除項時報 InvalidCastException 的問題分析與解決

WPF Prism 開發經驗總結&#xff1a;菜單命令刪除項時報 InvalidCastException 的問題分析與解決 在 WPF Prism 項目中使用 ContextMenu 執行刪除操作時&#xff0c;遇到一個令人疑惑的問題&#xff1a;命令綁定本身沒有問題&#xff0c;但點擊“刪除”菜單后&#xff0c;程序拋…

《WebGL打造高性能3D粒子特效系統:從0到1的技術探秘》

在游戲里,爆炸時四濺的火花、魔法釋放時閃爍的光暈;在可視化項目中,數據流動時呈現的璀璨光河,這些令人驚嘆的效果,背后離不開強大的技術支撐。而WebGL,作為在瀏覽器端實現硬件加速3D圖形渲染的技術,為我們開啟了構建高性能3D粒子特效系統的大門。 WebGL的渲染管線是整…

全國計算機等級考試二級題庫【C語言】:程序填空題型——結構體 自制答案詳解合輯

二級C語言程序填空題型簡介 1、/**********found**********/緊跟的下面一行的程序設空,一般為3個空; 2、常見錯誤: (1) (2) 3、做題推薦步驟: (1) (2) ---------------一、結構體--------------- 2、題目要求【結構體】 程序通過定義學生結構體變量,存儲了學生…

人工智能與城市:城市生活的集成智能

1. 智慧城市的核心價值&#xff1a;從 “硬件堆砌” 到 “智能協同”1.1 傳統城市的治理困境全球 55% 的人口居住在城市&#xff0c;到 2050 年這一比例將升至 68%。傳統城市管理面臨多重挑戰&#xff1a;資源分配失衡&#xff1a;早晚高峰主干道擁堵率達 80%&#xff0c;而支線…

Linux下掛載磁盤報superblock錯誤

Linux下掛載磁盤報superblock錯誤背景問題現象1、使用fdisk查詢設備文件信息2、掛載磁盤&#xff0c;報出fs type錯誤解決辦法1、使用e2fsk命令檢查整個磁盤2、resize2fs 命令調整文件系統塊大小和物理磁盤塊大小3、掛載磁盤&#xff0c;確認修復結果問題思考1、rclone命令做數…

Http證書體系及證書加密流程(通信流程)

一、HTTPS 證書體系&#xff1a;信任的基石 HTTPS 證書體系是保障網絡通信安全的核心機制&#xff0c;其本質是一套基于公鑰基礎設施&#xff08;PKI&#xff0c;Public Key Infrastructure&#xff09; 的信任體系&#xff0c;通過數字證書實現通信雙方的身份驗證和數據加密&…

【分布式架構】學習路徑概述:了解分布式系統的核心問題、解決方案與實戰說明

文章目錄零、前言一、分布式系統理論1、 分布式系統的一致性問題1.1、一致性問題理論&#xff08;CAP/BASE&#xff09;1.2、 一致性協議與算法&#xff08;Paxos/Raft&#xff09;&#xff1a;選主、分布式鎖1.3、 分布式事務(2PC\3PC\TCC)&#xff1a;服務一致性保障與性能2、…

C# 密封類_密封方法 (seadled 關鍵字)

C#允許將類聲明為密封類&#xff0c;密封類不能被繼承在什么場景用&#xff1f;答&#xff1a;防止重寫某些類導致代碼混亂密封類seadled 聲明密封類的關鍵字//seadled 聲明密封類的關鍵字 //密封類不能被繼承 sealed class Class1 {public int age;public string name;publi…

深度學習(魚書)day04--手寫數字識別項目實戰

深度學習&#xff08;魚書&#xff09;day04–手寫數字識別項目實戰 魚書的相關源代碼下載&#xff1a; 點擊鏈接&#xff1a;http://www.ituring.com.cn/book/1921 點擊“隨書下載” 第三項就是源代碼&#xff1a; 解壓后&#xff0c;在pycharm&#xff08;或其它IDE&#…

【自用】NLP算法面經(6)

一、FlashAttention 1、Tile-Based計算 將q,k,v分塊為小塊&#xff0c;每次僅處理一小塊&#xff1a; 利用gpu的片上SRAM完成QK^T和softmax避免中間結果寫入HBM 標準attention的計算算法如下&#xff1a;標準attention實現大量中間結果需要頻繁訪問HBM&#xff0c;而HBM的訪問速…

Vue頁面卡頓優化:從理論到實戰的全面解釋

目錄 1. 理解Vue頁面卡頓的幕后黑手 1.1 響應式系統的“雙刃劍” 1.2 虛擬DOM的“隱藏成本” 1.3 瀏覽器渲染的“性能陷阱” 實戰案例:一個“罪魁禍首”的排查 2. 優化響應式系統:讓數據“輕裝上陣” 2.1 使用v-if和v-show控制渲染 2.2 凍結靜態數據 2.3 精細化響應式…

從0開始學linux韋東山教程Linux驅動入門實驗班(6)

本人從0開始學習linux&#xff0c;使用的是韋東山的教程&#xff0c;在跟著課程學習的情況下的所遇到的問題的總結,理論雖枯燥但是是基礎。本人將前幾章的內容大致學完之后&#xff0c;考慮到后續驅動方面得更多的開始實操&#xff0c;后續的內容將以韋東山教程Linux驅動入門實…

高性能反向代理與負載均衡 HAProxy 與 Nginx

在現代高并發 Web 架構中&#xff0c;HAProxy 和 Nginx 是兩個非常重要的工具。它們在反向代理、負載均衡、SSL 終止、緩存、限流等方面發揮著關鍵作用。 一、HAProxy 與 Nginx 簡介 1. HAProxy 簡介 HAProxy&#xff08;High Availability Proxy&#xff09; 是一個使用 C …

AI安全“面壁計劃”:我們如何對抗算法時代的“智子”封鎖?

> 在算法窺視一切的今天,人類需要一場數字世界的“面壁計劃” 2025年,某醫院部署的AI分診系統被發現存在嚴重偏見:當輸入相同癥狀時,系統為白人患者分配急診通道的概率是黑人患者的**1.7倍**。調查發現,訓練數據中少數族裔樣本不足**15%**,導致AI在“認知”上形成了結…

數據庫數據恢復—報錯“system01.dbf需要更多的恢復來保持一致性”的Oracle數據恢復案例

Oracle數據庫故障&#xff1a; 某公司一臺服務器上部署Oracle數據庫。服務器意外斷電導致數據庫報錯&#xff0c;報錯內容為“system01.dbf需要更多的恢復來保持一致性”。該Oracle數據庫沒有備份&#xff0c;僅有一些斷斷續續的歸檔日志。Oracle數據庫恢復流程&#xff1a; 1、…

Spring Cloud Gateway 服務網關

Spring Cloud Gateway是 Spring Cloud 生態系統中的一個 API 網關服務&#xff0c;用于替換由Zuul開發的網關服務&#xff0c;基于Spring 5.0Spring Boot 2.0WebFlux等技術開發&#xff0c;提供了網關的基本功能&#xff0c;例如安全、監控、埋點和限流等&#xff0c;旨在為微服…

[數據結構]#6 樹

樹是一種非線性的數據結構&#xff0c;它由節點組成&#xff0c;并且這些節點之間通過邊連接。樹的每個節點可以有一個或多個子節點&#xff0c;并且有一個特殊的節點叫做根節點&#xff08;沒有父節點&#xff09;。樹在計算機科學中應用廣泛&#xff0c;尤其是在數據庫索引、…

車輛網絡安全規定之R155與ISO/SAE 21434

隨著科技的不斷進步&#xff0c;車輛已經從傳統的機械裝置演變為高度智能化的移動終端。現代汽車不僅配備了先進的駕駛輔助系統&#xff08;ADAS&#xff09;、車載信息娛樂系統&#xff08;IVI&#xff09;&#xff0c;還具備聯網功能&#xff0c;能夠實現遠程診斷、自動駕駛、…

Go語言實戰案例-合并多個文本文件為一個

以下是《Go語言100個實戰案例》中的 文件與IO操作篇 - 案例21&#xff1a;合并多個文本文件為一個 的完整內容&#xff0c;適用于初學者學習文件讀取與寫入的綜合運用。&#x1f3af; 案例目標使用 Go 語言將指定目錄下的多個 .txt 文件&#xff0c;合并成一個新的總文件。&…

基坑滲壓數據不準?選對滲壓計能實現自動化精準監測嗎?

一、滲壓監測的背景 滲壓計是一種專門用于測量構筑物內部孔隙水壓力或滲透壓力的傳感器&#xff0c;適用于長期埋設在水工結構物或其它混凝土結構物及土體內&#xff0c;以測量結構物或土體內部的滲透&#xff08;孔隙&#xff09;水壓力。 在水利工程中&#xff0c;大壩、水庫…