Java基础-IO流
文章目录
- 1.文件
- 1.基本介绍
- 2.常用的文件操作
- 1.创建文件的相关构造器和方法
- 代码实例
- 结果
- 2.获取文件相关信息
- 代码实例
- 结果
- 3.目录的删除和文件删除
- 代码实例
- 2.IO流原理及分类
- IO流原理
- IO流分类
- 3.FileInputStream
- 1.类图
- 2.代码实例
- 3.结果
- 4.FileOutputStream
- 1.类图
- 2.案例
- 代码实例
- 3.综合案例—文件拷贝
- 代码实例
- 5.FileReader
- 1.类图
- 2.基本介绍
- 3.案例
- 代码实例
- 6.FileWriter
- 1.类图
- 2.基本介绍
- 3.案例
- 代码实例
- 7.节点流与处理流
- 1.基本介绍
- 2.节点流和处理流的区别和联系
- 8.BufferedReader
- 代码实例
- 9.BufferedWriter
- 案例
- 代码实例
- 10.Buffered拷贝
- 代码实例
- 11.Buffered字节处理流
- 1.基本介绍
- 2.字节处理流拷贝(图片/音乐)
- 代码实例
- 3.字节处理流和字符处理流比较
- 12.对象处理流(读写对象)
- 1.序列化和反序列化
- 介绍
- 2.ObjectOutputStream
- 类图
- 案例
- 3.ObjectInputStream
- 类图
- 案例
- 对象处理流使用细节
- 13.标准输入输出流
- System.in
- System.out
- new Scanner(System.in)
- 14.转换流(字节流转换成字符流并指定编码)
- 1.字符流出现乱码引出转换流
- 2.InputStreamReader
- 解决乱码问题
- 代码实例
- 3.OutputStreamWriter
- 案例
- 代码示例
- 15.打印流
- PrintStream(字节打印流)
- 代码实例
- PrintWrite(字符打印流)
- 代码实例
- 16.IO流总结
- 1.示意图
- 字节流
- 字符流
- 2.细节说明
- 1.字节流和字符流处理的数据
- 2.处理流的说明
- 3.转换流的说明
- 4.打印流
- 5.常用的流
- 17.Properties处理配置文件
- 1.实际需求引出properties配置文件
- 2.使用Properties读取配置文件信息
- 3.使用Properties创建配置文件并且修改配置文件信息
- 18.本章作业
- 作业一
- 题目
- 代码
- 作业二
- 题目
- 代码
- 作业三
- 题目
- 代码
1.文件
1.基本介绍
2.常用的文件操作
1.创建文件的相关构造器和方法
代码实例
package IO_;import java.io.File;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileCreate {public static void main(String[] args) {//使用三种方式在e盘下创建三个文件// new File(String pathname)String path1 = "e:\\file1.txt";File file = new File(path1); //在内存中创建文件对象//调用方法在磁盘中创建文件try {file.createNewFile();System.out.println("创建文件1成功!");} catch (IOException e) {throw new RuntimeException(e);}// new File(File parent, String child)File file1 = new File("e:\\"); //父文件对象String child = "file2.txt"; //子文件路径File file2 = new File(file1, child);try {file2.createNewFile();System.out.println("创建文件2成功");} catch (IOException e) {throw new RuntimeException(e);}// new File(String parent, String child)String parent = "e:\\"; //父路径String child_ = "file3.txt";File file3 = new File(parent, child_);try {file3.createNewFile();System.out.println("文件3创建成功");} catch (IOException e) {throw new RuntimeException(e);}}
}
结果
2.获取文件相关信息
代码实例
package IO_;import java.io.File;/*** @author 孙显圣* @version 1.0*/
public class FileInfo {public static void main(String[] args) {File file = new File("e:\\file1.txt"); //创建文件对象System.out.println("文件绝对路径 " + file.getAbsolutePath());System.out.println("文件名字 " + file.getName());System.out.println("文件父级目录 " + file.getParent());System.out.println("文件大小(字节) " + file.length());System.out.println("文件是否存在 " + file.exists());System.out.println("是不是一个文件 " + file.isFile());System.out.println("是不是一个目录 " + file.isDirectory());}
}
结果
3.目录的删除和文件删除
代码实例
package IO_;import java.io.File;/*** @author 孙显圣* @version 1.0*/
public class FileMkdir {public static void main(String[] args) {// 判断e:\\file1.txt是否存在,如果存在则删除File file = new File("e:\\file1.txt");if (file.exists()) {file.delete();System.out.println("删除成功");}else {System.out.println("删除失败");}// 判断e:\\demo02是否存在,存在就删除,否则提示不存在String path = file.getParent() + "demo02"; //路径拼接File file1 = new File(path);if (file1.exists()) {file1.delete();System.out.println("删除成功");}else {System.out.println("删除失败");}// 判断e:\\demo\\a\\b\\c是否存在,如果不存在则创建File file2 = new File("e:\\demo\\a\\b\\c");if (file2.exists()) {System.out.println("已经存在");}else {file2.mkdirs();System.out.println("文件不存在,已经自动创建");}}
}
2.IO流原理及分类
IO流原理
IO流就相当于是外卖小哥,用来传输数据
IO流分类
3.FileInputStream
1.类图
2.代码实例
package IO_;import org.junit.jupiter.api.Test;import java.io.FileNotFoundException;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileInputStream {//逐个字节读取@Testpublic void one() {String path = "e:\\hello.txt"; //1.文件路径int readData = 0;java.io.FileInputStream fileInputStream = null;try {fileInputStream = new java.io.FileInputStream(path); //2.根据文件路径,创建输入流的对象//3.逐个字节读取while ((readData = fileInputStream.read()) != -1) { //返回读取的字节,如果返回-1则到文件末尾System.out.print((char) readData); //将字节转换成char类型并输出}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}finally {//4.关闭字节流try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}//按照字节数组读取public static void main(String[] args) {String path = "e:\\hello.txt"; //1.文件路径byte[] bytes = new byte[8]; //3.8个容量的字节数组int readData = 0;java.io.FileInputStream fileInputStream = null;try {fileInputStream = new java.io.FileInputStream(path); //2.字节流对象//4.按照字节数组读取while ((readData = fileInputStream.read(bytes)) != -1) { //会将字节读进字节数组中,返回读进的字节数System.out.print(new String(bytes, 0, readData)); //将字节数组转换成String类型并且输出}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {//5.关闭字节流try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
3.结果
4.FileOutputStream
1.类图
2.案例
代码实例
package IO_;import java.io.FileOutputStream;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileOutputStream01 {public static void main(String[] args) {//输出流如果没有那个文件,会自动创建String path = "e:\\a.txt"; //1.文件路径FileOutputStream fileOutputStream = null; //2.获取文件输出流引用try {
// fileOutputStream = new FileOutputStream(path); //3.获取文件输出流fileOutputStream = new FileOutputStream(path, true); //8.设置该文件输出流的写入位置为文件末尾(不覆盖原来的文件)//5.输出单个字符fileOutputStream.write('h');//6.输出字符串String a = "hello,world";fileOutputStream.write(a.getBytes()); //使用字符串的getBytes来将字符串转化成字节数组//7.输出部分字符串String b = "hsp,java";fileOutputStream.write(b.getBytes(), 0, 3);} catch (IOException e) {throw new RuntimeException(e);} finally {//4.关闭文件输出流try {fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
3.综合案例—文件拷贝
代码实例
package IO_;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileCopy {public static void main(String[] args) {//文件源路径String src = "C:\\Users\\86156\\Desktop\\images\\1.png";//文件目标路径String dest = "e:\\1.png";//文件输入流FileInputStream fileInputStream = null;//文件输出流FileOutputStream fileOutputStream = null;byte[] bytes = new byte[1024]; //用来存储文件输入的字节数组int readLength = 0; //记录读取的字节数try {//获取文件输入流fileInputStream = new FileInputStream(src);//获取文件输出流fileOutputStream = new FileOutputStream(dest);//将文件读取到字节数组中while ((readLength = fileInputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, readLength); //将读取到的部分写入目标文件}System.out.println("拷贝成功!");} catch (IOException e) {throw new RuntimeException(e);} finally {//关闭两个流try {fileInputStream.close();fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
5.FileReader
1.类图
2.基本介绍
3.案例
代码实例
package IO_;import org.junit.jupiter.api.Test;import java.io.FileReader;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileReader_ {//按照单个字符读取public static void main(String[] args) {//读取路径String src = "e:\\a.txt";//获取字符输入流引用FileReader fileReader = null;int readData = 0; //接收输入的字符try {//获取字符输入流fileReader = new FileReader(src);//按照字符,循环读取while ((readData = fileReader.read()) != -1) { //这里返回的是单个字符但是,是以int形式返回的System.out.print(((char)readData));}} catch (IOException e) {throw new RuntimeException(e);} finally {//关闭字符输入流try {fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}//按照字符数组读取@Testpublic void readMore() {//读取路径String src = "e:\\a.txt";//获取字符输入流引用FileReader fileReader = null;char[] chars = new char[100]; //用来接收读取的数据int redLen = 0; //记录读取长度try {//获取字符输入流fileReader = new FileReader(src);//按照字符,循环读取while ((redLen = fileReader.read(chars)) != -1) { //这里是将内容读取到char数组,返回的是读取的长度System.out.print(new String(chars, 0, redLen)); //将读取到的部分转化成String,并输出}} catch (IOException e) {throw new RuntimeException(e);} finally {//关闭字符输入流try {fileReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
6.FileWriter
1.类图
2.基本介绍
3.案例
代码实例
package IO_;import java.io.FileWriter;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class FileWriter_ {public static void main(String[] args) {//写入文件地址String path = "e:\\a.txt";//获取输出字符流引用FileWriter fileWriter = null;try {fileWriter = new FileWriter(path); //获取输出字符流对象//写入单个字符fileWriter.write('a');//写入字符数组char[] a = new char[]{'1','2','3'};fileWriter.write(a);//写入指定字符数组的指定部分fileWriter.write("你好,世界".toCharArray(),3,2); //注意这里面的指定位置指的是off(开始位置)len(长度),这里我就是,从3开始2个位置所以是世界//写入字符串fileWriter.write("字符串");//写入部分字符串fileWriter.write("韩顺平,java",0, 3);} catch (IOException e) {throw new RuntimeException(e);} finally {//关闭字符流try {fileWriter.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
7.节点流与处理流
1.基本介绍
简单来说,就是节点流的处理局限性太强,java设计者就设计了处理流,处理流中有一个属性,这个属性是一个类的引用,而这个类是各种节点流的父类,通过将其他节点流的对象赋值给这个属性,就可以向上转型,从而使用这个属性来调用各种节点流的方法
2.节点流和处理流的区别和联系
- 节点流式底层流,直接跟数据源相接
- 处理流(包装类 )包装节点流,既可以消除不同节点流的实现差异,也可以对提供更方便的方法来完成输入输出
- 处理流对节点流进行包装,使用了修饰器设计模式,不会与数据源直接相连
- 重点就是:处理流有一个属性,这个属性是很多子类型的父类,也就是说可以接收很多子类型的对象,接受的谁的对象,掉用的就是谁的方法
8.BufferedReader
代码实例
package IO_;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class BufferReader_ {public static void main(String[] args) {//读取的路径String path = "e:\\a.txt";//BufferedReader的引用BufferedReader bufferedReader = null;//接受读取的内容String readData = null;try {bufferedReader = new BufferedReader(new FileReader(path)); //由于要对文件进行操作,所以传入FileReaderwhile ((readData = bufferedReader.readLine()) != null) { //按行读取System.out.println(readData);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {try {bufferedReader.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}
9.BufferedWriter
案例
代码实例
package IO_;import java.io.FileWriter;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class BufferedWriter {public static void main(String[] args) throws IOException {String path = "e:\\a.txt";java.io.BufferedWriter bufferedWriter = new java.io.BufferedWriter(new FileWriter(path, true));//以追加的方式写入bufferedWriter.write("韩顺平教育,,,java");bufferedWriter.close(); //关闭外层流}
}
10.Buffered拷贝
代码实例
package IO_;import java.io.*;
import java.io.BufferedWriter;/*** @author 孙显圣* @version 1.0*/
public class BufferedCopy {public static void main(String[] args) throws IOException {//源地址String src = "e:\\a.txt";//目标地址String dest = "e:\\b.txt";String readData = null; //存储读取信息//获取输入流BufferedReader bufferedReader = new BufferedReader(new FileReader(src));//获取输出流BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(dest));//按行读取信息while ((readData = bufferedReader.readLine()) != null) {//写入bufferedWriter.write(readData);bufferedWriter.newLine(); //写入一行}//关闭bufferedWriter.close();bufferedReader.close(); }
}
11.Buffered字节处理流
1.基本介绍
2.字节处理流拷贝(图片/音乐)
代码实例
package IO_;import java.io.*;
import java.io.FileInputStream;/*** @author 孙显圣* @version 1.0*/
public class BufferedCopy02 {public static void main(String[] args) throws IOException {//源地址String src = "e:\\1.png";//目标地址String dest = "e:\\3.png";//存储读取到的字节数组byte[] bytes = new byte[1024];//存储读取长度int readLen = 0;//获取输入字节流BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(src));//获取输出字节流BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(dest));//循环读取while ((readLen = bufferedInputStream.read(bytes)) != -1) {bufferedOutputStream.write(bytes, 0, readLen);}//关闭字节流bufferedInputStream.close();bufferedOutputStream.close();}
}
3.字节处理流和字符处理流比较
- 字节处理流主要用于处理二进制文件(视频、图片等),也能处理二进制文件
- 字符处理流主要用于处理文本文件(效率高),不能处理二进制文件
- 字节处理流可以写一个字节、字节数组、部分字节数组
- 字符处理流可以写一个字符、一个字符数组、一个字符串、部分字符数组、部分字符串
- 简单来说,字节处理的是单个字节,字节数组,字符处理的是单个字符,字符数组,字符串
12.对象处理流(读写对象)
1.序列化和反序列化
介绍
- 序列化就是在保存数据的时候,保存数据的值和数据类型
- 反序列化就是在回复数据时,恢复数据的值和数据类型
- 需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一
- Serializable(推荐) 这是一个标记接口,里面没有任何方法
- Externalizable
2.ObjectOutputStream
类图
案例
package IO_;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;/*** @author 孙显圣* @version 1.0*/
public class ObjectOutputStream_ {public static void main(String[] args) throws IOException {//输出文件路径String path = "e:\\data.dat"; //注意序列化的文件是dat格式的//获取对象输出流ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(path));//保存objectOutputStream.writeInt(100); // IntegerobjectOutputStream.writeBoolean(true);objectOutputStream.writeChar('a');objectOutputStream.writeDouble(10.2);objectOutputStream.writeUTF("adf");objectOutputStream.writeObject(new Dog("jack",12));//关闭objectOutputStream.close();}
}
class Dog implements Serializable {private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
3.ObjectInputStream
类图
案例
package IO_;import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;/*** @author 孙显圣* @version 1.0*/
public class ObjectInputStream_ {public static void main(String[] args) throws IOException, ClassNotFoundException {//输入的地址String path = "e:\\data.dat";//获取对象处理流ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(path));// 按照之前序列化的次序来获取对象System.out.println(objectInputStream.readInt());System.out.println(objectInputStream.readBoolean());System.out.println(objectInputStream.readChar());System.out.println(objectInputStream.readDouble());System.out.println(objectInputStream.readUTF());Object o = objectInputStream.readObject();System.out.println(o.getClass());System.out.println(o);//关闭对象处理流objectInputStream.close();}
}
对象处理流使用细节
- 在修改了对象处理流的文件之后,需要重新运行一遍程序,保持版本一致性
- 如果是自定义的对象,要保证该输入流文件可以引入
- 读写顺序需要一致
- 序列化或者反序列化对象必须实现Serializable接口
- 序列化中的类建议添加SerialVersionUID,为了提高版本的兼容性
- 序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员
- 序列化对象时,要求里面的属性也需要实现序列化接口
- 序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也默认实现了序列化
13.标准输入输出流
System.in
- 编译类型:InputStream
- 运行类型:BufferedInputStream(可以处理所有输入,只需要传入相应的InputStream子类即可)
- 表示的是标准输入 键盘
System.out
- 编译类型:PrintStream
- 运行类型:PrintStream
- 表示的是标准输出 显示器
new Scanner(System.in)
- 这个就相当于给扫描器传入了接受键盘输入的数据
14.转换流(字节流转换成字符流并指定编码)
1.字符流出现乱码引出转换流
- 将文件类型改成非utf-8,然后使用字符流读取
- 如果想解决这个问题,就只能将字符流转换成字节流并且指定编码,然后再转回来
2.InputStreamReader
解决乱码问题
代码实例
package IO_;import org.junit.jupiter.api.Test;import java.io.FileInputStream;
import java.io.*;/*** @author 孙显圣* @version 1.0*/
public class CodeQuestion {public static void main(String[] args) throws IOException {//使用字符流读取文件内容String url = "e:\\a.txt";//获取字符处理流BufferedReader bufferedReader = new BufferedReader(new FileReader(url));//读取一行内容String s = bufferedReader.readLine();System.out.println(s);}//字节流转换成字符流@Testpublic void test() throws IOException {String url = "e:\\a.txt";//这里是使用文件字节流读取信息,并传入编码,会返回一个字符流的实例InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(url), "gbk");// //使用节点流的方式去读
// char[] chars = new char[100];
// int readLen;
// while ((readLen = inputStreamReader.read(chars)) != -1) { //读到字符数组中并返回读取的长度
// System.out.println(new String(chars, 0, readLen)); //根据读取的长度取出数组内的长度
// }//使用BufferedReader的方式去读String re = null;BufferedReader bufferedReader = new BufferedReader(inputStreamReader);while ((re = bufferedReader.readLine()) != null) {System.out.println(re);}}
}
3.OutputStreamWriter
案例
代码示例
package IO_;import java.io.*;
import java.io.BufferedWriter;/*** @author 孙显圣* @version 1.0*/
public class FileOutputStream02 {public static void main(String[] args) throws IOException {//使用OutputStreamWriter 将字节流转换成字符流指定utf-8并且执行//要写入的urlString url = "e:\\a.txt";BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(url), "utf-8"));//这里使用OutputStreamWriter将字节流转化为字符流并且指定编码,并且使用BufferedWriter来操作这个字符流bufferedWriter.write("世界,你好!");bufferedWriter.close();}
}
15.打印流
PrintStream(字节打印流)
代码实例
package IO_;import java.io.FileNotFoundException;
import java.io.PrintStream;/*** @author 孙显圣* @version 1.0*/
public class PrintStream_ {public static void main(String[] args) throws FileNotFoundException {//使用字节打印流在屏幕打印PrintStream out = System.out;out.println("你好,世界");//修改打印位置为文件中的位置System.setOut(new PrintStream("e:\\a.txt"));System.out.println("dsfasdfs");}
}
PrintWrite(字符打印流)
代码实例
package IO_;import java.io.*;/*** @author 孙显圣* @version 1.0*/
public class PrintWriter_ {public static void main(String[] args) throws IOException {PrintWriter printWriter = new PrintWriter(System.out); //传入了一个标准输出到屏幕的对象PrintWriter printWriter1 = new PrintWriter(new FileWriter("e:\\a.txt")); //传入了一个输入到文件的对象printWriter1.print("辅导费");printWriter1.close();printWriter.println("dagasdg");printWriter.close();}
}
16.IO流总结
1.示意图
字节流
- InputStream
- FileInputStream(节点流)
- BufferedInputStream(处理流)(System.in 标准输入 键盘)
- ObjectInputStream(对象处理流,反序列化)
- OutputStream
- FileOutputStream(节点流)
- BufferedOutputStream(处理流)
- ObjectOutputStream(对象处理流,序列化)
- PrintStream(字节打印流)(System.out 标准输出 显示器)
字符流
- Reader
- FileReader(节点流)
- BufferedReader(处理流)
- InputStreamReader(转换流)
- Writer
- FileWriter(节点流)
- BufferedWriter(处理流)
- OutputStreamWriter(转换流)
- PrintWriter(字符打印流)
2.细节说明
1.字节流和字符流处理的数据
- 字节流:处理单个字节(字符)、字节数组,一般处理二进制文件时使用
- 字符流:处理单个字符、字符数组、字符串(可写),一般处理文本文件时使用
2.处理流的说明
- 字符处理流可以读写String类型,并且 可以读一行,字节处理流还是只能读字节或者字节数组
- 由于节点流的处理局限性太强,所以产生了处理流
- 处理流使用了修饰器模式,就是使用一个其他节点流的父类型的属性,通过构造方法来接收其他节点流的实例,接受了谁的实例,这个属性调用的方法就是谁的方法,也就是处理哪个节点
- 处理流可以处理基类的所有节点子类
3.转换流的说明
- 为了指定文本文件的编码,又想使用字符流,就产生了转换流
- 转换流可以接收字节流的实例,用于读写和设置编码,然后返回一个转换流,由于这个转换流也是两大基类节点子类,所以一般使用处理流来处理
4.打印流
- System.out:默认指向标准输出 显示器的打印流,使用System.setOut可以接收输出到文件的PrintStream类
- PrintWriter:它的构造方法可以接收一个System.out(指向一个标准输出到显示器的实例),也可以接收一个输出到文件的FileWriter
5.常用的流
- 一般使用处理流Buffered。。。来进行处理
- 字节处理流,读写字节数组,需要字节数组缓冲区和计数器,循环条件是不等于-1
- 字符处理流,读写字符串,可以读一行,需要字符串缓冲区,循环条件是不等于null
17.Properties处理配置文件
1.实际需求引出properties配置文件
在开发中操作数据库需要用户名和密码,如果在程序中写死,则一但更换了数据库则需要修改源代码,所以一般将其写在配置文件中,在代码中使用Properties类来读取
2.使用Properties读取配置文件信息
package IO_;import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;/*** @author 孙显圣* @version 1.0*/
public class Properties_ {public static void main(String[] args) throws IOException {//1.创建实例Properties properties = new Properties();//2.使用流的方式加载配置文件properties.load(new FileReader("src\\mysql.properties"));//3.以打印流的方式展示所有文件properties.list(System.out); //这里传入一个标准打印流 屏幕//4.根据key,获取value信息String username = properties.getProperty("username");String password = properties.getProperty("password");System.out.println("username:" + username);System.out.println("password:" + password);}
}
3.使用Properties创建配置文件并且修改配置文件信息
package IO_;import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;/*** @author 孙显圣* @version 1.0*/
public class Properties_1 {public static void main(String[] args) throws IOException {//使用properties来创建一个文件赋值并且修改//1.创建实例Properties properties = new Properties();//2.为其设置几个值properties.setProperty("username","12344");properties.setProperty("password","9999");//3.将其存储到配置文件中properties.store(new FileWriter("src\\mysql1.properties"), "这个是文档开头注释");//4.修改配置文件properties.setProperty("username","111111");properties.store(new FileWriter("src\\mysql1.properties"),null);}
}
18.本章作业
作业一
题目
代码
package IO_;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
public class HomeWork01 {public static void main(String[] args) throws IOException {//创建文件对象File file = new File("e:\\mytemp");//判断是否是文件夹,如果不是则创建if (!file.isDirectory()) {file.mkdirs();}//在e盘刚才创建的目录下创建文件hello.txt,如果存在则输出内容File file1 = new File(file, "hello.txt");if (file1.exists()) {System.out.println("文件已经存在");//写入内容BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file1));bufferedWriter.write("你好世界");//关闭bufferedWriter.close();}file1.createNewFile();}
}
作业二
题目
代码
package IO_;import org.junit.jupiter.api.Test;import java.io.*;
import java.io.FileInputStream;/*** @author 孙显圣* @version 1.0*/
public class HomeWork02 {public static void main(String[] args) throws IOException {File file = new File("e:\\mytemp\\hello.txt");//创建对象BufferedReader bufferedReader = new BufferedReader(new FileReader(file));//存储数据String re = null;int num = 0; //记录行号while ((re = bufferedReader.readLine()) != null) { //按行读取num ++;//加上行号之后重新输出System.out.println(num + re);//读取出来}//关闭bufferedReader.close();}//将文件改成gbk码则需要使用转换流@Testpublic void test() throws IOException {File file = new File("e:\\mytemp\\hello.txt");//使用转换流BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));String re = null;while ((re = bufferedReader.readLine()) != null) {System.out.println(re);}//关闭转换流bufferedReader.close();}
}
作业三
题目
代码
package IO_;import org.junit.jupiter.api.Test;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;/*** @author 孙显圣* @version 1.0*/
public class HomeWork03 {public static void main(String[] args) throws IOException {//创建实例Properties properties = new Properties();//设置值properties.setProperty("name", "tom");properties.setProperty("age", "5");properties.setProperty("color", "red");//存储到文件properties.store(new FileOutputStream("src\\dog.properties"), null);}
}
class Dog_ {//读取配置文件并且初始化并输出@Testpublic void test() throws IOException {Properties properties = new Properties();//加载文件properties.load(new FileInputStream("src\\dog.properties"));//完成初始化properties.setProperty("name","jack");//输出文件properties.list(System.out);}
}
相关文章:

Java基础-IO流
文章目录 1.文件1.基本介绍2.常用的文件操作1.创建文件的相关构造器和方法代码实例结果 2.获取文件相关信息代码实例结果 3.目录的删除和文件删除代码实例 2.IO流原理及分类IO流原理IO流分类 3.FileInputStream1.类图2.代码实例3.结果 4.FileOutputStream1.类图2.案例代码实例 …...

MySQL的基本概念
一.MySQL概念: 你可以把MySQL想象成一个大杂货店,里面有很多货架,每个货架上摆放着不同种类的商品,MySQLMySQ就像是这个杂货店的后台库存管理系统。 1.表格(货架):每个货架上摆放商品࿰…...
如何入职车载测试
以下课件都可以学习,一对一教你如何入职车载 可以学习的内容如下:第一:仪表项目、导航项目、车控项目、OTA升级项目、UDS诊断项目。第二:DBC数据库制作、CDD数据库制作。第三:项目规范文档阅读、调查表理解。第四&…...
【物联网】Modbus 协议简介
Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集,这里就我们的实际项目经验分享Modbus协议 你可以通过QingHub作业直接体验试用,也可以根据手册开发相应的代码块。 qinghub项目已经全面开源。 …...

网络编程-套接字相关基础知识
1.1. Socket简介 套接字(socket)是一种通信机制,凭借这种机制, 客户端<->服务器 模型的通信方式既可以在本地设备上进行,也可以跨网络进行。 Socket英文原意是“孔”或者“插座”的意思,在网络编程…...

基于Python的医疗机构药品及耗材进销存信息管理系统
技术:pythonmysqlvue 一、系统背景 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本医疗机构药品及耗材信息管理系统就是在这样的大环境下诞生&#x…...

Java学习笔记(14)
常用API Java已经写好的各种功能的java类 Math Final修饰,不能被继承 因为是静态static的,所以使用方法不用创建对象,使用里面的方法直接 math.方法名 就行 常用方法 Abs,ceil,floor,round,max,minm,pow,sqrt,cbrt,random Abs要注意参数的…...

联合和枚举
联合体 联合体和结构体类似,也有多个成员构成,但编译器只为最大的成员分配足够的空间。 联合体最大的特点是所有的成员共用同一块内存空间。也叫共用体。 union Un { int i; struct s { char c1; char c2; char c…...

《深入Linux内核架构》第2章 进程管理和调度 (3)
目录 2.5 调度器的实现 2.5.1 概观 2.5.2 数据结构 2.5.3 处理优先级 2.5.3.1 nice和prior 2.5.3.2 vruntime 2.5.3.3 weight权重 2.5.4 核心调度器 2.5 调度器的实现 调度器的任务: 1. 执行调度策略。 2. 执行上下文切换。 无论用户态抢占,还是…...

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Refresh)
可以进行页面下拉操作并显示刷新动效的容器组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 从API version 11开始,Refresh子组件会跟随手势下拉而下移…...

数据资产管理解决方案:构建高效、安全的数据生态体系
在数字化时代,数据已成为企业最重要的资产之一。然而,如何有效管理和利用这些数据资产,却是许多企业面临的难题。本文将详细介绍数据资产管理解决方案,帮助企业构建高效、安全的数据生态体系。 一、引言 在信息化浪潮的推动下&a…...

Visual Studio 2013 - 调试模式下查看监视窗口
Visual Studio 2013 - 调试模式下查看监视窗口 1. 监视窗口References 1. 监视窗口 Ctrl Alt W,1-4:监视窗口 (数字键不能使用小键盘) or 调试 -> 窗口 -> 监视 -> 监视 1-4 调试状态下使用: 在窗口中点击空白行,…...

CTF 题型 SSRF攻击例题总结
CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 (注意是70端口)python…...

【Swing】Java Swing实现省市区选择编辑器
【Swing】Java Swing实现省市区选择编辑器 1.需求描述2.需求实现3.效果展示 系统:Win10 JDK:1.8.0_351 IDEA:2022.3.3 1.需求描述 在公司的一个 Swing 的项目上需要实现一个选择省市区的编辑器,这还是第一次做这种编辑器…...

spring suite搭建springboot操作
一、前言 有时候久了没开新项目了,重新开发一个新项目,搭建springboot的过程都有点淡忘了,所有温故知新。 二、搭建步骤 从0开始搭建springboot 1.创建work空间。步骤FileNewJava Working Set。 2.选择Java Working Set。 3.自…...

mysql重构
力扣题目链接 列转行 SELECT product_id, store1 store, store1 price FROM products WHERE store1 IS NOT NULL UNION SELECT product_id, store2 store, store2 price FROM products WHERE store2 IS NOT NULL UNION SELECT product_id, store3 store, store3 price FROM p…...

Linux用户、用户组
用户管理命令: 首先要先知道两个配置文件:/etc/group 用户组配置文件/etc/passwd 保存了所有用户的用于读取的必要信息**/etc/shadow **是 Linux 系统中用于存储用户密码信息的文件。这个文件也被称为“影子文件”,因为它包含了 /etc/passwd…...

操作系统系列学习——信号量的代码实现
文章目录 前言信号量的代码实现 前言 一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油! 本文总结自B站【哈工大】操作系统 李治军(全32讲) 老师课程讲的非常好,感谢 【哈…...
【Python操作基础】——变量操作
🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享 擅长Python、Matlab、R等主流编程软件 累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…...
滑模控制算法(SMC)讲解-案例(附C代码)
目录 一、滑模控制算法的基本原理 1)滑模面(Sliding Surface)的设计 2)达到条件(Reaching Condition)...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...