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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;大坝、水库…