1.(File类)以下关于File类的说法正确的是:AB
A. 一个File对象代表了操作系统中的一个文件或者文件夹
B. 可以使用File对象创建和删除一个文件
C. 可以使用File对象创建和删除一个文件夹
D. 当一个File对象被垃圾回收时,系统上对应的文件夹也被删除
2. (File类)将下列代码补充完整
import java.io.File;
import java.io.IOException;
public class TestMyFile {
public static void main(String[] args) throws IOException {
File file;
file = new File("Files\\hello.txt");// 船舰一个File对象表示当前目录下的“hello.txt”文件
file.createNewFile();
if (file.exists()) {// 判断该文件是否存在
System.out.println(file.getAbsolutePath());
}
}
}
运行结果:
9. (过滤流)利用Data流,完成下面操作:
Ⅰ. 判断当前目录下是否存在一个“test.dat”的文件,如果该文件不存在,则往该文件中写入一个long类型的数值:10000L
Ⅱ. 如果该文件存在,则从该文件中读出数值,并把该数值加1之后,再存回文件中。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test09 {
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
File f = new File("Files\\test.dat");
if (!f.exists()) {// 如果文件不存在,则创建一个
f.createNewFile();
}
FileOutputStream fos = new FileOutputStream("Files\\test.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);// 对象输出流
Long d = 10000L;
oos.writeObject(d);// 对象写入
oos.flush();
FileInputStream fis = new FileInputStream("Files\\test.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();// 读取对象
System.out.println(obj);
d = d + 1;// d加1
oos.writeObject(d);// 再写入
Object obj2 = ois.readObject();// 读取对象
System.out.println(obj2);
fos.close();
oos.close();
fis.close();
ois.close();
}
}
运行结果:
10. (字符流,桥转换)要想从某个文件中获得一个字符输出流,则至少有以下三种方式:
A. 利用FileWriter类
B. 利用PrintWriter类
C. 利用FileOutputStream类,并通过OutputStreamWriter类获得Writer请简述这三种方式获得Writer的区别
FileWriter类是字符节点输出流,可以直接创建调用方法写入,编码为系统默认
PrintWriter类是字符过滤流,封装了print()/println()方法,支持写入后换行,而且需要传入一个字符节点流参数进行对象构造,编码为系统默认
FileOutputStream类是一个字节输出节点流,创建好后将其传入一个桥转换流OutputStreamWriter,就可以将字节流转换为字符流,可以设置编码格式
11.(字节流,字符流)以下几种文件格式,应当使用字节流还是字符流?
Ⅰ. .java源文件 字符流
Ⅱ. .class字节码文件 字节流
Ⅲ. .html网页文件 字节流
Ⅳ. .jpg图像文件 字节流
Ⅴ. .mp3音乐文件 字节流
12. (过滤流)连线题。把过滤流和相应的功能用线连起来。注意,左右两边不是一一对应的关系。
ObjectInputStream 字节流,读八种基本类型,读对象,缓冲功能
ObjectOutputStream 字节流,写八种基本类型,写对象,缓冲功能
BufferedInputStream 字节流,缓冲功能
BufferedOutputStream 字节流,缓冲功能
DataInputStream 字节流,读八种基本类型
DataOutputStream 字节流,写八种基本类型
PrintWriter 字符流,写八种基本类型,写对象,缓冲功能,写字符串并换行
PrintStream 字节流,写对象,写字符串并换行
BufferedReader 字符流,缓冲功能,读一行文本
14.(字符流,桥转换)完成下面功能:
事先在当前目录下准备好一个test.txt的文本文件,要求该文本文件是使用GBK编码的多行文本文件。
如:test.txt
窗前明月光
疑是地上霜
举头望明月
低头思故乡
利用字节流+桥转换读入这个文本文件,按照行的顺序,以UTF-8编码方式,写到test2.txt文件中。
例:test2.txt
低头思故乡
举头望明月
疑是地上霜
床前明月光
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Test14 {
public static void main(String[] args) throws IOException {
File file = new File("Files\\test2.txt");
file.createNewFile();
OutputStream os = new FileOutputStream("Files\\test2.txt");// 字节流
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");// 桥转换流
String[] s = new String[] { new String("床前明月光"), new String("疑是地上霜"), new String("举头望明月"),
new String("低头思故乡") };
for (int i = 0; i < s.length; i++) {
osw.write(s[i]);// 写入
osw.write("\n");// 换行
}
osw.flush();// 刷新
InputStream is = new FileInputStream("Files\\test2.txt");// 字节流
InputStreamReader isr = new InputStreamReader(is, "UTF-8");// 桥转换流
int c = 0;
while (c != -1) {
char[] b = new char[5];
c = isr.read(b);
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]);
}
}
os.close();
osw.close();
is.close();
isr.close();
}
}
17. (字节流,BufferedReader)完成下面操作。
在当前目录下船舰一个worldcup.txt的文本文件,其格式如下:
2006/意大利
2002/巴西
…
该文件采用“年份/世界杯冠军”的方式保存每一年世界杯冠军的信息。
要求:读入该文件的基础上,让用户输入一个年份,输出该年的世界杯冠军。如果该年没有举办世界杯,则输出“没有举办世界杯”
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Scanner;
public class Test17 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("Files\\worldcup.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
String[] str = new String[] {new String("2006/意大利"),new String("2002/巴西")};
for(int i=0;i<str.length;i++) {
osw.write(str[i]);
osw.write("\n");
}
osw.flush();
HashMap<String, String> hm = new HashMap<String, String>();
FileInputStream fis = new FileInputStream("Files\\worldcup.txt");//字节流
InputStreamReader isr = new InputStreamReader(fis,"GBK");//桥转换流,转为字符流
BufferedReader br = new BufferedReader(isr);
String s = null;
while ((s = br.readLine()) != null) {
String[] b = s.split("/");
hm.put(b[0], b[1]);
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个年份:");
String a = sc.next();
if (hm.containsKey(a)) {
System.out.println(a+"年世界杯冠军球队是:" + hm.get(a));
} else {
System.out.println(a + " 年没有举行世界杯!");
}
}
}
18. (综合)
从命令行中读入一个文件名,判断该文件是否存在。如果该文件存在,则在原文件相同路径下创建一个文件名为“copy_原文件名”的新文件,该文件内容为原文件的拷贝。例如:读入/home/java/photo.jpg则创建一个文件/home/java/copy_photo.jpg新文件内容和原文件内容相同
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Test18 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
System.out.print("请输入文件名:");
String s = sc.next();
File file = new File("Files\\Test18\\" + s);
File file2 = new File("Files\\Test18\\" + "copy_" + s);
if (file.exists()) {// 判断文件是否存在
file2.createNewFile();// 存在则创建copy文件
//内容复制
FileInputStream fis = new FileInputStream("Files\\Test18\\" + s);
FileOutputStream fos = new FileOutputStream("Files\\Test18\\" + "copy_" + s);
int i = 0;
while (true) {
if (i == -1) {
break;
}
byte[] b = new byte[4];
i = fis.read(b);
fos.write(b);
}
} else {
file.createNewFile();// 不存在则创建此文件
}
}
}
运行结果: