在千锋“逆战”学习第32天
每日一句:每一个问题都是一把锁,你要相信世界上一定有一把钥匙能打开这把锁,你也能找到这把钥匙。
今天学习了字符编码和File类的内容
明天继续努力。
作业
1.一下关于File类说法正确的是
A. 一个 File 对象代表了操作系统中的一个文件或者文件夹
B. 可以使用 File 对象创建和删除一个文件
C. 可以使用 File 对象创建和删除一个文件夹
D. 当一个 File 对象被垃圾回收时,系统上对应的文件或文件夹也被删除
A B C
--------------------------------------------------------------------------
2.补全代码
public class TestMyFile {
public static void main(String[] args) throws Exception{
File file;
//创建一个File对象表示当前目录下的“hello.txt”文件
file = new File("hello.txt");
//判断文件是否存在
System.out.println(file.exists());
//如果文件存在输出完整路径
if(file.exists()) {
System.out.println(file.getAbsolutePath());
}
}
}
运行结果:`
true
E:\QFtrain\JAVA EE\JavaTrain\hello.txt
--------------------------------------------------------------------------
10.要想从某个文件中获得一个字符输出流,则至少有以下三种方式
A. 利用 FileWriter 类
B. 利用 PrintWriter 类
C. 利用 FileOutputStream 类,并通过 OutputStreamWriter 类获得 Writer
请简述这三种方式获得 Writer 的区别。
FileWriter可以直接读取文件,可以直接写入字符串
FileWriter fw = new FileWriter(new File("c:\a.txt"));
PrintWrite加一个TRUE可以自动刷新缓冲区
PrintWriter pw = new PrintWriter(fw);
FileOutStream活动的是字节
fileoutputstream fos = new FileOutputStream(“newPoem.txt”);
OutputStreamWriter osw = new OutputStreamWriter(fos,”UTF-8″);
--------------------------------------------------------------------------
11.以下几种文件格式,应当使用字节流还是字符流
.java源文件 字符流
.class字节码文件 字节流
.html网页文件 字符流
.jpg图像文件 字节流
.mp3音乐文件 字节流
--------------------------------------------------------------------------
12.写出过滤流相应的功能
ObjectInputStream 读对象
ObjectOutputStream 写对象
BufferInputStream 字节流、缓冲功能
BufferedOutputStream 字节流、缓冲功能
DataInputStream 字节流、读八种基本类型
DataOutputStream 字节流、写八种基本类型
PrintWriter 字符流、写字符串并换行
PrintStream 字节流
BufferedReader 字符流、缓冲功能、读入一行文本
--------------------------------------------------------------------------
14. 事先在当前目录下准备好一个 test.txt 的文本文件,要求该文本文件是使用 GBK 编码的多行文本文件。如:test.txt
窗前明月光
疑是地上霜
举头望明月
低头思故乡
利用字节流+桥转换读入这个文本文件,然后按照行的顺序,以 UTF-8 的编码方式,写到 test2.txt 文件中,例:test2.txt
低头思故乡
举头望明月
疑是地上霜
窗前明月光
public class Test14 {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis, "Gbk");
BufferedReader br = new BufferedReader(isr);
FileOutputStream fos = new FileOutputStream("test2.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "Utf-8");
PrintWriter pw = new PrintWriter(osw);
List<String> list = new ArrayList<String>();
System.out.println("test.txt");
while (true) {
String str = br.readLine();
if (str == null) {
break;
}
list.add(str);
System.out.println(str);
}
Collections.reverse(list);
System.out.println("test2.txt");
for (String str : list) {
pw.println(str);
System.out.println(str);
}
br.close();
pw.close();
}
}
运行结果:
test.txt
床前明月光
疑是地上霜
举头望明月
低头思故乡
test2.txt
低头思故乡
举头望明月
疑是地上霜
床前明月光
--------------------------------------------------------------------------
17. 在当前目录下创建一个 worldcup.txt 的文本文件,其格式如下:
2006/意大利
2002/巴西
该文件采用“年份/世界杯冠军”的方式保存每一年世界杯冠军的信息。
要求:读入该文件的基础上,让用户输入一个年份,输出该年的世界杯冠军。如果该年没有举办世界杯,则输出“没有举办世界杯”
public class TestWorldCup {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("worldcup.txt");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
HashMap<String, String> map = new HashMap<String, String>();
String[] con = new String[2];
String str;
while ((str = br.readLine()) != null) {
con = str.split("/");
map.put(con[0], con[1]);
}
Scanner input = new Scanner(System.in);
System.out.print("输入一个年份:");
String str1 = input.next();
if (map.containsKey(str1)) {
System.out.println("该年世界杯冠军是:" + map.get(str1));
} else {
System.out.println("没有举办世界杯");
}
}
}
运行结果:
输入一个年份:1998
该年世界杯冠军是:法国
输入一个年份:1988
没有举办世界杯
--------------------------------------------------------------------------
18.从命令行中读入一个文件名,判断该文件是否存在。如果该文件存在,则在原文件相同路径下创建一个文件名为“copy_原文件名”的新文件,该文件内容为原文 件 的 拷 贝 。
public class TestCopy {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个文件名:");
String fname = sc.nextLine();
File file = new File("E:\\QFtrain\\JAVA EE\\JavaTrain");
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
String name = file2.getName();
if (fname.equals(name)) {
FileReader fr = new FileReader(fname);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("copy_" + fname);
PrintWriter pw = new PrintWriter(fw);
System.out.println("新文件" + "\n" + "copy_" + fname);
while (true) {
String str = br.readLine();
if (str == null) {
break;
}
pw.println(str);
System.out.println(str);
}
} else {
System.out.println("没有这个文件");
break;
}
}
}
}
运行结果:
输入一个文件名:
worldcup.txt
新文件
copy_worldcup.txt
2006/意大利
2002/巴西
1998/法国
1994/巴西
1990/德国
1986/阿根廷
1982/意大利
1978/阿根廷
1974/德国
1970/巴西
1966/英格兰
1962/巴西
1958/巴西
1954/德国
1950/乌拉圭
1938/意大利
1934/意大利
1930/乌拉圭
输入一个文件名:
test.doc
没有这个文件