java实验十三io_java第14周实验(IO流)

0. 字节流与二进制文件

###我的代码

public class WriterStu {

public static void main(String[] args) {

DataOutputStream dos = null;

Student[] stus = new Student[100];

Student d1 = new Student(1, "x", 18, 99.5);

Student d2 = new Student(2, "x", 19, 100.0);

Student d3 = new Student(3, "x", 20, 59.5);

try (FileOutputStream fos = new FileOutputStream(new File("e:/Student.data"))) {

dos = new DataOutputStream(fos);

for (Student student : stus) {

dos.writeInt(student.getId());

dos.writeUTF(student.getName());

dos.writeInt(student.getAge());

dos.writeDouble(student.getGrade());

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

try (DataInputStream dis = new DataInputStream(new FileInputStream("e:/Student.data"))) {

int id = dis.readInt();

String name = dis.readUTF();

int age = dis.readInt();

double grade = dis.readDouble();

Student stu=new Student(id,name,age,grade);

System.out.println(stu);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

###我的总结 文本文件中的数据都是以字符的形式进行组织,通常可以逐行或全部读取到一个字符串变量中。二进制文件可以存储int/double/char等基本数据类型。

#1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) ###我的代码 ####4.

String fileName1="e:/data.txt";

try(

FileOutputStream fos=new FileOutputStream(fileName1);

ObjectOutputStream oos=new ObjectOutputStream(fos))

{

Student s=new Student(5,"l",12,85);

oos.writeObject(s);

}

catch (Exception e) {

e.printStackTrace();

}

try(

FileInputStream fis=new FileInputStream(fileName1);

ObjectInputStream ois=new ObjectInputStream(fis))

{

Student newStudent =(Student)ois.readObject();

System.out.println(newStudent);

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

###我的总结 将对象流写在txt中会发生乱码,改为dat格式则不会发生乱码。

#2. 缓冲流(结合使用JUint进行测试) ###我的代码

public class PrintWriterTest {

public static void main(String[] args) throws FileNotFoundException {

File file = new File("e:/data.txt");

if(file.exists())

{

System.out.println("文件已存在!");

System.exit(0);

}

PrintWriter pw=new PrintWriter(file);

Random r=new Random(100);

for(int i=0;i<1000_0000;i++) {

int j=r.nextInt(11);

pw.println(j);

}

pw.close();

}

}

####JunitTest

public class JunitTest {

@Test

public void testBufferedReader() {

BufferedReader br = null;

int n = 0, sum = 0;

double average = 0;

try {

br = new BufferedReader(new FileReader("e:/data.txt"));

String line = null;

try {

while ((line = br.readLine()) != null) {

int num = Integer.parseInt(line);

n++;

sum += num;

}

average = sum / n;

} catch (IOException e) {

e.printStackTrace();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

System.out.format("%d %d %.5f", n, sum, average);

System.out.println();

if (br != null) {

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

@Test

public void testScanner() {

File file = new File("e:/data.txt");

Scanner sc = null;

int n = 0, sum = 0;

double average = 0;

try {

sc = new Scanner(file);

while (sc.hasNext()) {

int num = sc.nextInt();

sum+=num;

n++;

}

average = sum / n;

System.out.format("%d %d %.5f", n, sum, average);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

93fe6fc5c64d0d5d37458d4223346533.png

###我的总结 使用BufferedReader更快,BufferedReader使用缓冲可以减少IO次数,因为IO操作很耗时间,所以读取速度变快。

#3. 字节流之对象流 ###我的代码

public static void writeStudent(List stuList) {

String fileName = "e:/data.txt";

try (FileOutputStream fos = new FileOutputStream(fileName);

ObjectOutputStream ois = new ObjectOutputStream(fos)) {

ois.writeObject(stuList);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

}

public static List readStudents(String fileName) {

List stuList = new ArrayList<>();

try (FileInputStream fis = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(fis)) {

stuList = (List) ois.readObject();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

return stuList;

}

###我的总结 ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。

#5. 文件操作 ###我的代码

import java.io.File;

import java.nio.file.Path;

import java.nio.file.Paths;

public class Files {

Path dir=Paths.get("e:/data.txt");

public static void findFile(Path dir,String fileName) {

File file =dir.toFile();

File[] files =file.listFiles();

for(File file1:files) {

if(file1.isDirectory()) {

findFile(file1.toPath(),fileName);

}else {

if(file1.equals(new File(fileName))) {

System.out.println("Found:");

System.out.println(file1.getAbsolutePath());

}

}

}

}

}

###我的总结 File类和Path类可以相互转换,Paths类可以直接获得Path对象,不需要new Path。

#6. 正则表达式 ####判断一个给定的字符串是否是10进制数字格式 ###我的代码

import java.util.regex.Pattern;

public class testIsDigit {

public static void main(String[] args) {

System.out.println(isDigit("123a"));

System.out.println(isDigit("-123"));

System.out.println(isDigit("a123a"));

System.out.println(isDigit("123"));

System.out.println(isDigit("-"));

}

public static boolean isDigit(String s) {

return Pattern.matches("^-?\\d+$", s);

}

}

1802b9f467b6fbe66cff39b79f15ae68.png

###我的总结 熟悉正则表达式的语法可以帮助我们更加简便得编写代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值