当前位置:网站首页>特殊流&Properties属性集实例遇到的问题及解决方法
特殊流&Properties属性集实例遇到的问题及解决方法
2022-07-29 01:31:00 【王小小鸭】
目录
题干1:
编写一个小程序,记录程序运行的次数,满足5次后,给出提示,试用次数已到,请注册!
分析:
1.将配置文件封装成File对象,判断文件是否存在,不存在则自己创建
2.需要计数器;
3.计数器的值,生命周期要比应用程序的生命周期要长,需要对计数器的值进行持久化。count = 1,里面存储的应该是键值方式,Map集合,要和设备上的数据关联,需要IO技术。集合 + IO = Properties。
解题思路:
1.编写一个小程序类,就以猜数字为例,在1-100之间随机生成一个任意自然数,依次输入数字比对生成数字,答对退出,即为一次;
System.out.println("请输入一个数字(1-100):");
int number=sc.nextInt();//用来接收控制台录入的数字
//只在猜对时跳出循环,程序结束
while(true){
if (number < i) {
System.out.println("sorry,你猜小了");
} else if (number > i) {
System.out.println("sorry,你猜大了");
} else if (number==i){
System.out.println("恭喜你,答对了");
break;
}
System.out.println("请在输入一个数字:");
number=sc.nextInt();
}2.创建数据源目录File对象,路径是Temp\\applet.txt,判断文件是否存在,不存在则自己创建;
File file = new File("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
if (!file.exists()) {
file.createNewFile();//创建文件
}3.创建好以后applet.txt文件以后记得往里面写入初始化对象count=0(一定要记得!!!)
4.从文件中读取数据到Properties集合,用load()方法实现;
FileReader fr = new FileReader("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
//从文件中读取数据到Properties集合,用load()方法实现
Properties prop = new Properties();//从输入字符流读取属性列表(键和元素对)
prop.load(fr);
fr.close(); //释放资源5.判断次数是否到到5次了,
如果到了,给出提示:试用次数已到,请注册!
如果没到可以继续运行
//判断次数是否到到5次了
if (number >= 5) {
//如果到了,给出提示:试用次数已到,请注册!
System.out.println("试用次数已到,请注册!");
} else {
//可以继续运行
Running02 running = new Running02();
running.start();
}6.运行一次次数+1,重新写回文件,用Properties的store()方法实现
//次数+1,重新写回文件,用Properties的store()方法实现
number++;
prop.setProperty("count", String.valueOf(number));
FileWriter fw = new FileWriter("Temp\\applet.txt");
prop.store(fw, null);
fw.close();出现的问题及解决方法:
问题1:运行直接退出,报错
原因:if语句区域错误
解决:将“}”放到正确的位置上即可
问题2:

原因:
prop.load(fr);还没写入就释放资源,自然就是null,报错字符串转换类型错误,将内容写入就可以正常运行了
解决:

问题3:读取不到数据
原因:applet.txt文件中没有初始化次数count
解决:写入初始化对象count=0
注意事项:
1.一开始我试图用FileReader创建数据源目录File对象,但是在判断文件是否存在时我犯了难,发现File.exists()更方便,于是改了代码,
先创建File对象再用File.exists()判断是否存在,
若不存在则用file.createNewFile()创建文件,
然后写入新创建的FileReader对象中
File file = new File("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
if (!file.exists()) {
file.createNewFile();//创建文件
}
FileReader fr = new FileReader("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
//从文件中读取数据到Properties集合,用load()方法实现
Properties prop = new Properties();//从输入字符流读取属性列表(键和元素对)
prop.load(fr);
fr.close(); //释放资源2.创建好以后applet.txt文件以后记得往里面写入初始化对象count=0(一定要记得!!!)
运行结果:


完整代码:
运行类:
package com.B.IOStream_14.Properties;
import java.util.Random;
import java.util.Scanner;
//运行代码的类
public class Running02 {
public static void start() {
//生成一个1~100的随机数
Random r=new Random();
int i=r.nextInt(100);
//键盘录入猜的数字
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数字(1-100):");
int number=sc.nextInt();//用来接收控制台录入的数字
//只在猜对时跳出循环,程序结束
while(true){
if (number < i) {
System.out.println("sorry,你猜小了");
} else if (number > i) {
System.out.println("sorry,你猜大了");
} else if (number==i){
System.out.println("恭喜你,答对了");
break;
}
System.out.println("请在输入一个数字:");
number=sc.nextInt();
}
}
}
测试类:
package com.B.IOStream_14.Properties;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
//2.编写一个小程序,记录程序运行的次数,满足5次后,给出提示,试用次数已到,请注册!
//分析:
// 1.将配置文件封装成File对象,判断文件是否存在,不存在则自己创建
// 2.需要计数器;
// 3.计数器的值,生命周期要比应用程序的生命周期要长,需要对计数器的值进行持久化。
// count = 1,里面存储的应该是键值方式,Map集合,要和设备上的数据关联,需要IO技术。
// 集合 + IO = Properties
public class A2 {
public static void main(String[] args) throws IOException {
//创建数据源目录File对象,路径是Temp\applet.txt
File file = new File("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
if (!file.exists()) {
file.createNewFile();//创建文件
}
FileReader fr = new FileReader("E:\\IdeaProjects\\firstProject\\Temp\\applet.txt");
//从文件中读取数据到Properties集合,用load()方法实现
Properties prop = new Properties();//从输入字符流读取属性列表(键和元素对)
prop.load(fr);
fr.close(); //释放资源
//通过Properties集合获取到玩游戏的次数
String count = prop.getProperty("count");
int number = Integer.parseInt(count);
//判断次数是否到到5次了
if (number >= 5) {
//如果到了,给出提示:试用次数已到,请注册!
System.out.println("试用次数已到,请注册!");
} else {
//可以继续运行
Running02 running = new Running02();
running.start();
}
//次数+1,重新写回文件,用Properties的store()方法实现
number++;
prop.setProperty("count", String.valueOf(number));
FileWriter fw = new FileWriter("Temp\\applet.txt");
prop.store(fw, null);
fw.close();
}
}题干2:
用代码实现以下需求
(1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,将6个学员信息存入到ArrayList集合中
(3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
(4)读取D:\\StudentInfo.txt文件中的ArrayList对象
(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
(6)将ArrayList集合中排序后的结果利用PrintWriter流写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
解题思路:
1.定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法;
private String name;
private String gender;
private int age;
public Student03() {
}
public Student03(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student03{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';2. 创建集合对象
ArrayList<Student03> array = new ArrayList<Student03>();
3.键盘录入学生对象所需要的数据
//键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生性别:");
String gender = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();4.创建学生对象,把键盘录入的数据赋值给学生对象的成员变量,往集合中添加学生对象
Student03 s = new Student03();
s.setName(name);
s.setGender(gender);
s.setAge(age);
//往集合中添加学生对象
array.add(s);5.将存有6个学员信息的ArrayList集合对象写入到StudentInfo.txt文件
FileWriter fw = new FileWriter(new File("Temp\\StudentInfo.txt"));
for (Student03 stu03 : array) {
fw.write(String.valueOf(stu03));
fw.flush();
}
System.out.println("复制完毕!");
fw.close();
6.为了提高代码的复用性,我们用方法来调用方法addStudent,遍历集合,采用通用遍历格式实现
//为了提高代码的复用性,我们用方法来调用方法addStudent
for (int i =0; i<6;i++){
addStudent(array);
}
// 6:遍历集合,采用通用遍历格式实现
for (int i = 0; i < array.size(); i++) {
Student03 s = array.get(i);
System.out.println(s.getName() + ","+s.getGender()+"," + s.getAge());
}
}
出现的问题:
问题1:输入姓名性别和年龄,结果之输出姓名和年龄,性别丢失

但是查看构造出来的StudentInfo里面有性别,怪哉!

原因:破案了!遍历输出的时候没加进去orz……
解决:

运行结果 :

完整代码:
学生类:
package com.B.IOStream_14.Properties;
//3.用代码实现以下需求
//(1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
//(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,将6个学员信息存入到ArrayList集合中
//(3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
//(4)读取D:\\StudentInfo.txt文件中的ArrayList对象
//(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
//(6)将ArrayList集合中排序后的结果利用PrintWriter流写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
public class Student03 {
private String name;
private String gender;
private int age;
public Student03() {
}
public Student03(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student03{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}
测试类:
package com.B.IOStream_14.Properties;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
//3.用代码实现以下需求
//(1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
//(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,将6个学员信息存入到ArrayList集合中
//(3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
//(4)读取D:\\StudentInfo.txt文件中的ArrayList对象
//(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
//(6)将ArrayList集合中排序后的结果利用PrintWriter流写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
public class A3 {
public static void main(String[] args) throws IOException {
// 创建对象
ArrayList<Student03> array = new ArrayList<Student03>();
//为了提高代码的复用性,我们用方法来调用方法addStudent
for (int i =0; i<6;i++){
addStudent(array);
}
// 6:遍历集合,采用通用遍历格式实现
for (int i = 0; i < array.size(); i++) {
Student03 s = array.get(i);
System.out.println(s.getName() + ","+s.getGender()+"," + s.getAge());
}
}
/*
两个明确:
返回值类型:void
参数:ArrayList<Student03> array
*/
public static void addStudent (ArrayList<Student03> array) throws IOException {
//键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.nextLine();
System.out.println("请输入学生性别:");
String gender = sc.nextLine();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student03 s = new Student03();
s.setName(name);
s.setGender(gender);
s.setAge(age);
//往集合中添加学生对象
array.add(s);
// 将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
FileWriter fw = new FileWriter(new File("Temp\\StudentInfo.txt"));
for (Student03 stu03 : array) {
fw.write(String.valueOf(stu03));
fw.flush();
}
System.out.println("复制完毕!");
fw.close();
}
}
最后想说的话:
写代码看似简单却又不简单,很多时候看似不起眼的小细节往往能决定成败,吾生有涯而学无涯,一起努力加油呀!
边栏推荐
- JVM内存溢出在线分析Dump文件以及在线分析打开.hprof文件得出JVM运行报告jvisualvm怎么在线分析
- leetcode/乘积小于K 的连续子数组的个数
- Lm13 morphological quantification momentum period analysis
- Implementation of 10m multifunctional signal generator with FPGA
- 全志T3/A40i工业核心板,4核[email protected],国产化率达100%
- Know that Chuangyu is listed in many fields of ccsip 2022 panorama
- iVX低代码平台系列详解 -- 概述篇(二)
- Have you ever encountered the situation that the IP is blocked when crawling web pages?
- Force deduction brush question (1): sum of two numbers
- JS dom2 and dom3
猜你喜欢

Complete collection of common error handling in MySQL installation

基于C51实现数码管的显示

「活动推荐」冲冲冲!2022 国际开源节有新内容
![[cloud native] what is the microservice architecture](/img/84/a0ec68646083f3539aa39ad9d98749.png)
[cloud native] what is the microservice architecture

LM13丨形态量化-动量周期分析

基于C51控制蜂鸣器

What is browser fingerprint recognition

IDEA 连接 数据库
![[circuit design] open collector OC output of triode](/img/48/5a111b81f0d99990fbcc5263313c07.jpg)
[circuit design] open collector OC output of triode

JetPack--Navigation实现页面跳转
随机推荐
费曼学习法(符号表)
点击回到顶部js
JetPack--Navigation实现页面跳转
[electronic components] zener diode
Qt源码分析--QObject(4)
mobile-picker.js
使用本地缓存+全局缓存实现小型系统用户权限管理
[云原生]微服务架构是什么
How to write, load and unload plug-ins in QT
How companies make business decisions -- with the help of data-driven marketing
Leetcode/0 and 1 consecutive subarrays with the same number
TI C6000 TMS320C6678 DSP+ Zynq-7045的PS + PL异构多核案例开发手册(2)
Probability Density Reweight
"Wei Lai Cup" 2022 Niuke summer multi school training camp 2, sign in question GJK
Mathematical modeling - location of police stations
h5背景音乐通过触摸自动播放
Establish an engineering template based on STM32 in keil -- detailed steps
[electronic components] constant voltage, amplify the current of the load (triode knowledge summary)
Understand the clock tree in STM32 in simple terms
Promise solves asynchrony