今天是周日,底下的程序是周五写的,礼拜五礼拜六太浪了就没写博客,嘿嘿,以后估计就是每周写五篇了。这周末过得很无趣啊,没啥好说的,每天就是起床吃饭,刷会儿手机,健身,回来看看电影写写代码。每天的日子很简单啊。周五的时候导师还问我进度如何。。。咋说呢,没写呗,我觉得他好像很无奈了,还说我进度太慢。别说,这进度是挺慢的,尴尬啊,JAVA基础还是得学学。这周咋办呢,写安卓吧。还剩两个月多就辞职吧,我反正是想好了,我爸妈估计也会同意的。就是我舅又得训我,嘿嘿嘿。到时候好好请胡过一顿,和他聊聊天,那得谢谢人家啊。就这样,明天就是新的一周了,继续过吧,还剩两个月多,估计会很快了。
package homework;
import java.io.*;
/**
* 练习-向文件中写入两个数字,然后把这两个数字分别读取出来
* 要求
* 第一种方式: 使用缓存流把两个数字以字符串的形式写到文件里,再用缓存流以字符串的形式读取出来,然后转换为两个数字。
* 注: 两个数字之间要有分隔符用于区分这两个数字。
* 比如数字是31和15,如果不使用分隔符,那么就是3115,读取出来就无法识别到底是哪两个数字。
* 使用分隔符31@15能解决这个问题。
* 第二种方式: 使用数据流DataOutputStream向文件连续写入两个数字,然后用DataInpuStream连续读取两个数字
*/
public class Test {
private static File file = new File("D:\\xyz\\lol2.txt");
//缓存流写数字
public static void HuanCunWrite(){
try(FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw)) {
pw.print(31+"@"+15);
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void HuanCunRead(){
try (FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr)){
//读取缓存流中的一行(在此是唯一的一行)
String line = br.readLine();
//以@为分隔的字符,分隔line,存入String数组中
String[] ss = line.split("@");
System.out.println(ss[0]+" "+ss[1]);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ShuJuWrite(){
try (FileOutputStream fos = new FileOutputStream(file);
DataOutputStream dos =new DataOutputStream(fos)){
dos.writeInt(20);
dos.writeInt(18);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void ShuJuRead(){
try (FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis)){
int x = dis.readInt();
int y = dis.readInt();
System.out.println(x+" "+y);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HuanCunWrite();
HuanCunRead();
ShuJuWrite();
ShuJuRead();
}
}package homework;
import java.io.*;
/**
* 创建一个Hero对象,设置其名称为garen。
* 把该对象序列化到一个文件garen.lol。
* 然后再通过序列化把该文件转换为一个Hero对象
*
* 注:把一个对象序列化有一个前提是:这个对象的类,必须实现了Serializable接口
*/
public class TestStream {
public static void main(String[] args) {
//创建一个Hero garen
//要把Hero对象直接保存在文件上,务必让Hero类实现Serializable接口
Hero garen = new Hero();
garen.name = "garen";
garen.hp = 616;
File file = new File("d:/garen.lol");
try (//创建对象输出流
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos =new ObjectOutputStream(fos);
//创建对象输入流
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois =new ObjectInputStream(fis)){
oos.writeObject(garen);
Hero hero = (Hero)ois.readObject();
System.out.println(hero.name);
System.out.println(hero.hp);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}package homework;
import java.io.*;
/**
* 准备一个长度是10,类型是Hero的数组,使用10个Hero对象初始化该数组
* 然后把该数组序列化到一个文件heros.lol
* 接着使用ObjectInputStream 读取该文件,并转换为Hero数组,验证该数组中的内容,是否和序列化之前一样
*/
public class TestStream {
public static void main(String[] args) {
int MAX_VALUE = 10;
//定义一个长度为10的Hero类型数组
Hero[] heroes = new Hero[MAX_VALUE];
//使用10个Hero对象初始化该数组
System.out.println("序列化前的数组内容");
for (int i = 0;i < MAX_VALUE;i++){
heroes[i] = new Hero();
heroes[i].name = "hero"+i;
heroes[i].hp = (float)(500 + Math.random() * 100);
System.out.println(heroes[i].name+" "+heroes[i].hp);
}
File file = new File("D:\\xyz\\garen.lol");
try (//创建对象输出流,从内存中写东西到文件
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos =new ObjectOutputStream(fos);
//创建对象输入流,读内容到内存
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois =new ObjectInputStream(fis)){
//把该Hero数组序列化到一个文件garen.lol
oos.writeObject(heroes);
Hero[] newHeros = new Hero[MAX_VALUE];
newHeros = (Hero[]) ois.readObject();
System.out.println("序列化后的数组内容");
for (int i = 0;i < MAX_VALUE;i++){
System.out.println(newHeros[i].name+" "+newHeros[i].hp);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}package homework;
import java.io.*;
import java.util.Scanner;
/**
* 自动创建有一个属性的类文件。
* 通过控制台,获取类名,属性名称,属性类型,根据一个模板文件,自动创建这个类文件,并且为属性提供setter和getter
*/
public class TestStream {
public static void main(String[] args) {
System.out.println("请输入类的名称");
Scanner in = new Scanner(System.in);
String className = in.nextLine();
System.out.println("请输入属性的类型:");
String type = in.nextLine();
System.out.println("请输入属性的名称:");
String property = in.nextLine();
String Uproperty = toUpperFirstLetter(property);
//读取模板文件
File modelFile = new File("D:\\xyz\\Model.txt");
//初始化模板文件内容
String modelContent = null;
//FileReader进行文件读取
try (FileReader fr = new FileReader(modelFile)){
char[] cs = new char[(int) modelFile.length()];
// 以字符流的形式读取文件所有内容,存放到cs数组中
fr.read(cs);
modelContent = new String(cs);
} catch (IOException e) {
e.printStackTrace();
}
//进行替换
String fileContent = null;
fileContent = modelContent.replaceAll("@class@", className)
.replaceAll("@type@", type)
.replaceAll("@property@", property)
.replaceAll("@Uproperty@", Uproperty);
String fileName = className+".java";
//替换后的内容
System.out.println("替换后的内容:");
System.out.println(fileContent);
File file = new File("D:\\xyz",fileName);
//写入新文件
try(FileWriter fw =new FileWriter(file);){
fw.write(fileContent);
} catch (IOException e) {
e.printStackTrace();
}
//file.getAbsolutePath() 获取文件的地址
System.out.println("文件保存在:" + file.getAbsolutePath());
}
//首字母大写
public static String toUpperFirstLetter(String str){
char upperCaseFirst =Character.toUpperCase(str.charAt(0));
String rest = str.substring(1);
return upperCaseFirst + rest;
}
}
京公网安备 11010502036488号