IO初体验
文件与目录
File类创建文件对象(绝对路径/相对路径)
查看File路径和名称:
File getAbsoluteFile() :获取绝对路径
String getAbsolutePath():获取绝对路径
String getPath() :获取文件路径
String getName() :获取文件名称
File getParentFile():获取上级目录文件(一般用来进行判断是否缺少父级文件夹)
String getParent() :获取上级目录路径
File类中方法-文件操作
boolean isFile() :是否是文件
boolean createNewFile() :创建新的文件
static File createTempFile(String prefix, String suffix) :创建临时文件boolean delete() :删除文件
void deleteOnExit() :在JVM停止时删除文件
boolean exists():判断文件是否存在
boolean renameTo(File dest) :重新修改名
File类中方法-目录操作
boolean isDirectory() :判断是否是目录
boolean mkdir() :创建当前目录
boolean mkdirs() :创建当前目录和上级目录
String[] list() :列出所有的文件名
File[] listFiles() :列出所有文件对象
static File[] listRoots() :列出系统盘
IO
Reader,字符输入流的抽象父类。
Writer,字符输出流的抽象父类。
InputStream,字节输入流的抽象父类。
OutputStream,字节输出流的抽象
FileReader,Reader的子类,从文件中读取字符。
FileWriter,Writer的子类,往文件中写入字符。
FileInputStream,InputStream的子类,从文件中读取字节。FileOutputStream,OutputStream的子类,往文件中写入字节。
BufferedReader,字符缓冲输入流,用于提升字符读取速度。BufferedWriter,字符缓冲输入流,用于提升字符写入速度。BufferedInputStream,字节缓冲输入流,用于提升字节读取速度。BufferedOutputStream,字节缓冲输出流,用于提升字节写入速度。
DataInputStream,数据输入流,用于读取基本数据类型数据DataOutputStream,数据输出流,用于写入基本数据类型。ObjectInputStream,对象输入流,用于读取基本数据类型和对象类型。被读取的对象要实现Serializable接口。
ObjectOutputStream,对象输出流,用于写入基本数据类型和对象类型。被写入的对象要实现Serializable接口。
PrintWriter,字符打印流,用于写入字符数据。
PrintStream,字节打印流,用于写入字节数据。
InputStreamReader,输入转换流,用于把字节输入流流转换为字符输入流,可以指定编码格式。
OutputStreamWriter,输出转换流,用于把字节输出流转换为字符
习题小练(简易考试系统–控制台打印)
需求,读取xx.txt文件的习题,将试题存入集合进行便利,存储用户输入答案,在用户提交后与正确答案进行比对(可翻上下题,可查询历史成绩)
资料如上!
代码实现
//试题属性
public class Item {
private String title;
private String optionA;
private String optionB;
private String optionC;
private String optionD;
private String answer;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getOptionA() {
return optionA;
}
public void setOptionA(String optionA) {
this.optionA = optionA;
}
public String getOptionB() {
return optionB;
}
public void setOptionB(String optionB) {
this.optionB = optionB;
}
public String getOptionC() {
return optionC;
}
public void setOptionC(String optionC) {
this.optionC = optionC;
}
public String getOptionD() {
return optionD;
}
public void setOptionD(String optionD) {
this.optionD = optionD;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
public Item(String title, String optionA, String optionB, String optionC, String optionD, String answer) {
super();
this.title = title;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.answer = answer;
}
public Item() {
super();
}
}
//实现功能
public class ExamManager {
//存储所有试题
static List allItem = new ArrayList<>();
//存储自己的答案
static String[] myAnswter = null;
//临时集合
static List<String> tempList = new ArrayList<>();
static {
try {
initItem();
myAnswter = new String[allItem.size()];
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//初始化所有的试题
public static void initItem() throws IOException {
readFileToList();
for(int i = 0;i<tempList.size();i+=7) {
String title = tempList.get(i);
String optionA = tempList.get(i+1);
String optionB = tempList.get(i+2);
String optionC = tempList.get(i+3);
String optionD = tempList.get(i+4);
String answer = tempList.get(i+5);
Item item = new Item(title, optionA, optionB, optionC, optionD, answer);
allItem.add(item);
}
System.out.println();
}
public static void readFileToList() throws IOException {
//读取文件内容封装到allItem
BufferedReader br = new BufferedReader(new FileReader("items.txt"));
//循环读取文件内容添加到集合
String str = null;
while((str=br.readLine()) != null) {
tempList.add(str);
}
br.close();
}
//开始考试
public static void startExam(int index) {
Item item = allItem.get(index);
System.out.println(item.getTitle());
System.out.println(item.getOptionA());
System.out.println(item.getOptionB());
System.out.println(item.getOptionC());
System.out.println(item.getOptionD());
}
public static void main(String[] args) {
ExamManager manger = new ExamManager();
boolean flag = true;
int index = 0;
Scanner sc = new Scanner(System.in);
while(flag) {
startExam(index);
System.out.println("请输入你的答案:");
String answer = sc.next();
myAnswter[index] = answer;
System.out.println("P 上一题,N 下一题 ,E 交卷");
String option = sc.next();
switch(option) {
case "P":{
index = index==0 ? index : --index;
break;
}
case "N":{
index = index==allItem.size()-1 ? index : ++index;
break;
}
case "E":{
flag = false;
break;
}
default:{
System.out.println("录入错误");
}
}
}
System.out.println("比对成绩");
double score = judge();
System.out.println("score:"+score);
}
public static double judge( ) {
double score = 0;
//比对两个集合 allItem myAnswer
for(int i = 0;i<allItem.size();i++) {
Item item = allItem.get(i);
if(item.getAnswer().equalsIgnoreCase(myAnswter[i])) {
score += 10;
}
}
return score;
}
}
@撒花!!!