前面介绍了字节输入流FileInputStream和字节输出流FileOutputStream。本课介绍字节输出流FileWriter的使用方法。
编程案例
在java编程中,经常使用配置文件存储程序的一些配置属性,如数据库连接地址、访问数据库的账户和密码、下载文件的存储路径等配置属性。
本次编程任务要求创建一个配置文件,该配置文件存储三个属性,分别是数据库连接地址、访问数据库的账户以及访问数据库的密码。程序启动后,要求用户输入数据库连接地址、访问数据库的账户以及访问数据库的密码,并将用户输入的值存储到配置文件中。
配置文件结构如下:
jdbc.url=jdbc:mysql://192.168.50.25:3306
jdbc.username=root
jdbc.password=123456
编程探讨
编程案例给出的任务要求是创建并输出一个存储数据库连接属性的配置文件,其给出的结构是文本文件,只有三行内容,第一行内容存储数据库的连接地址,第二行内容存储数据库访问账号,第三行内容存储数据库访问密码。
配置文件每行等号的左侧是配置属性名,如jdbc.url、jdbc.username、jdbc.password,等号右侧是配置属性的值,如jdbc:mysql://192.168.50.25:3306、root、123456。
考虑到配置文件是文本文件,可以使用FileWriter类来输出文件。FileWriter类是字符输出类,它的构造方法同FileOutputStream相同,也提供了四个常用的构造方法。分别说明如下:
场景1:应用File对象,实例化一个FileWriter对象
FileWriter(File file);
场景2:应用给出文件路径,实例化一个FileWriter对象
FileWriter(String fileName);
场景3:写入数据时,如果文件已存在,需要在实例化FileWriter对象时,指明写入的数据是覆盖原文件,还是将写入的数据追加到文件尾部。
FileWriter(File file, boolean append); FileWriter(String fileName, boolean append);
append为true时将写入的数据追加到文件尾部,为false时覆盖原文件。
本案例为新建配置文件,采用FileWriter(File file)构造方法,通过File对象创建一个新文件。
FileWriter对象实例化后,可以使用FileWriter提供的写入方法,将配置内容写入到配置文件。FileWriter类提供了三种写入方法,分别说明如下:
● public void write(int c) throws IOException
该方法写入单个字符c到文件,当需要单字符写入文件时,可以采用该方法。例如,当需要排除某些字符写入文件时、当需要判断每个写入的字符值时。
● public void write(char [] c, int offset, int len)
该方法将字符数组c的部分或全部内容写入文件,offset为数组的起始偏移量,len为写入的数组长度,当需要将数组的某一部分写入文件时,可以采用该方法。例如,存储一段文字内容的数组,可能只需要写入后半部内容。
● public void write(String s, int offset, int len)
该方法将字符串对象s的部分或全部内容写入文件,offset为字符串对象内容的起始偏移量,len为写入的字符串内容长度。当需要将字符串对象的内容全部或部分写入文件时,可以采用该方法。
● public void write(String s)
该方法将字符串对象写入文件,当需要将字符串对象全部内容写入文件时,可采用此方法。例如,本案例中数据库的连接地址、数据库访问账号、数据库访问密码均需要从用户处获取输入,并存储到字符串对象中。因此,本案例可以采用该方法将字符串内容写入到配置文件。
编程实现
程序声明三个字符串对象,分别存储用户输入的数据库连接地址、数据库访问账号、数据库访问密码。实例化File对象创建配置文件,实例化FileWriter对象打开字符输出流,调用FileWriter类write方法将程序声明的三个字符串对象按照配置文件结构要求格式化后写入到文件。
案例1:本课编程案例的代码实现。
在PCoreUnit6项目新建filewriter包,在filewriter包下新建FileWriteDemo类。代码如下:
package filewriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/**
* @ClassName: FileWriteDemo
* @Description: 输入与输出(FileWriter类)案例1
* @author 编程训练营
* @date
*
*/
public class FileWriteDemo {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
// url存储数据库的连接地址
String url = "";
// username存储数据库的访问账户
String username = "";
// password存储数据库的访问密码
String password = "";
// 声明Scanner变量,并用new运算符实例化Scanner
Scanner sc = new Scanner(System.in);
// 请求用户输入数据库连接地址、访问账户、访问密码
// 提示用户输入数据库连接地址
System.out.println("请输入数据库连接地址");
url = "jdbc.url=" + sc.next();
// 提示用户输入数据库访问账户
System.out.println("请输入数据库访问账户");
username = "jdbc.username=" + sc.next();
// 提示用户输入数据库访问密码
System.out.println("请输入数据库访问账户");
password = "jdbc.password=" + sc.next();
// 实例化File对象,文件路径为d://myproperty.txt
File file = new File("d://myproperty.txt");
try {
// 创建配置文件
file.createNewFile();
// 实例化FileWriter
FileWriter fos = new FileWriter(file);
// 写入数据库连接地址
fos.write(url);
fos.write("\n");
// 写入数据库访问账户
fos.write(username);
fos.write("\n");
// 写入数据库访问密码
fos.write(password);
fos.flush();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}配置文件的属性内容由配置属性前缀+用户输入的内容拼接而成。例如:数据库连接地址由属性前缀“jdbc.url=” 和用户输入的值确定。最后,调用FileWriter的write写入配置文件的属性内容,并在每个属性内容后写入换行符。
程序执行结果如下图所示:
myproperty.txt文件内容如下图所示:
