1.如在E盘下有一个Test.txt文本文件内容是
#刘德华#89#77#60
#张信哲#76#97#70
#周杰伦#89#88#90
#随便啦#87#70#80
要求通过java读取文本并把文本中的每一行后面的三个成绩相加,
最后按从大到小的顺序输出到另一个文本文件中.
输出后的文本文件内容应为:
#周杰伦#267
#张信哲#243
#随便啦#237
#刘德华#226
package hw.T01;
import java.io.*;
import java.util.*;
public class Demo {
public static void main(String[] args) throws IOException {
TreeMap<Integer, String> map= new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\javatest\\day0411\\test.txt"));
String line;
while ((line=bufferedReader.readLine())!=null){
String[] split = line.split("#");
int score = Integer.valueOf(split[2]) + Integer.valueOf(split[3]) + Integer.valueOf(split[4]);
map.put(score, split[1]);
}
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("text1.txt"));
Set<Integer> number1s = map.keySet();
for (Integer number1 : number1s) {
String s = map.get(number1);
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("#").append(s).append("#").append(number1);
bufferedWriter.write(String.valueOf(stringBuffer));
bufferedWriter.newLine();
}
bufferedWriter.close();
bufferedReader.close();
}
}
2.交易明细文件内容如下例:log.txt
#姓名 性别 帐号 发生额
刘德华|1|4155990188888888|300.00
晓龙|1|1155990199999999|500.00
黄晓明|1|4155990100000000|1000.50
张东健|1|4155990155555555|600.99
梁朝伟|0|4155990111111111|5000.00
刘德华|1|4155990188888888|200.00
张东健|1|4155990155555555|500.99
刘德华|1|4155880188888888|1200.00
PS:1)一行是一条交易明细,每行分4列,列间用|分隔。#为注释符号。
2)类TransRecord存储一条明细。
实现功能:
一个人可能消费有多笔。(当姓名和账号相同的话就认为是同一人)
统计每个人的消费总额。
按消费额的金额升序排序。
要求显示每个人的姓名、性别、帐号、消费总额的信息
package hw.T02;
import java.io.*;
import java.util.*;
public class Dmeo {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("log.txt"));
ArrayList<TransRecord> list = new ArrayList<>();
String len;
String s = bufferedReader.readLine();//把最上面一行读取出来,备用。
while ((len = bufferedReader.readLine()) != null) {
String[] split = len.split("\\|");
TransRecord transRecord = new TransRecord(split[0], Integer.parseInt(split[1]), (int) Long.parseLong(split[2]), Double.parseDouble(split[3]));
boolean i=true;
for (TransRecord list1 : list) {
if (list1.getBand() == transRecord.getBand() && list1.getName().equals(transRecord.getName())) {
list1.setBand(list1.getBand() + transRecord.getBand());
i=false;
}
if(i) {
list.add(transRecord);
}
}
}
BufferedWriter writer = new BufferedWriter(new FileWriter("log1.txt"));
writer.write(s);
writer.newLine();
for (TransRecord list1 : list) {
writer.write(list1.toString());
writer.newLine();
}
writer.close();
bufferedReader.close();
}
}
package hw.T02;
public class TransRecord {
private String name;
private int sex;
private int band;
private double money;
@Override
public String toString() {
return "TransRecord{" +
"name='" + name + '\'' +
", sex=" + sex +
", band=" + band +
", money=" + money +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getBand() {
return band;
}
public void setBand(int band) {
this.band = band;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public TransRecord(String name, int sex, int band, double money) {
this.name = name;
this.sex = sex;
this.band = band;
this.money = money;
}
}
- 按要求完成程序功能。将三个型数;写入到文件中,然后再读取出来。
将int i=3; int j=4;int k=5;写入到文件中,然后再读取出来并求出三个数的平均值。
要求:
- 创建数据文件对象(5分)
- 定义基本数据(5分)
- 写入数据(15分)
- 读取数据(15分)
- 求出三个数的平均值。(5分)
- 关闭流(5分)
1. package hw.T03;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
FileWriter fileWriter = new FileWriter("9.txt");
int i=3;
int j=4;
int k=5;
fileWriter.write(i);
fileWriter.write(j);
fileWriter.write(k);
fileWriter.close();
FileReader fileReader = new FileReader("9.txt");
int read = fileReader.read();
int read1 = fileReader.read();
int read2 = fileReader.read();
System.out.println((read+read1+read2)/3);
fileReader.close();
}
}
2.
- 按要求完成程序功能。
创建一个学生类,属性:姓名,年龄。将学生对象写入到文件中,然后再读取出来。
要求:
- 正确创建定数文件流对象(10分)
- 创建对象流(10分)
- 正确创建学生对象(5分)
- 将学生对象写入文件(10分)
- 从文件中读取学生对象,并输出信息。(10分)
- 关闭数据流资源(5分)
7、 package hw.T04;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = -396340593907191557L;
private String name;
private int age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
package hw.T04;
import java.io.*;
public class Dmeo {
public static void main1(String[] args) throws IOException {
ObjectOutputStream OutputStream = new ObjectOutputStream(new FileOutputStream("10.txt"));
Student student1= new Student("张三", 21);
Student student2 = new Student("张四", 22);
OutputStream.writeObject(student1);
OutputStream.writeObject(student2);
OutputStream.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("10.txt"));
Object o1 = objectInputStream.readObject();
Object o2 = objectInputStream.readObject();
System.out.println(o1);
System.out.println(o2);
objectInputStream.close();
}
}
1. 在文本文件中存有斐波那契数列(每一位置的值等于前面两位连续位置数值相加),1,1,2,3,5,8,13,21,34,55,读取第12个数
package hw.T05;
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("11.txt"));
String s = bufferedReader.readLine();
String[] split = s.split(",");
System.out.println(split[11]);
bufferedReader.close();
}
}
2. 将一个文件中的内容复制到另一个文件中(可包含中文)
package hw.T06;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Dmeo {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("12.txt");
FileOutputStream fileOutputStream = new FileOutputStream("13.txt");
int len;
byte[] bytes = new byte[10];
while ((len = fileInputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, len);
}
fileInputStream.close();
fileOutputStream.close();
}
}
3. 将一个文件夹中的内容复制到其它目录中。(比如:把D:\\chenhao中的内容复制一份到 e:\\zhangsan文件夹中)
(递归和通过字节流来进行复制FileInputStream和FileOutputStream)
package homework;
import java.io.*;
public class TestDir {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\chenhao");
File file2 = new File("D:\\zhangsan");
copyDir(file1,file2);
}
private static void copyDir(File file1, File file2) throws IOException {
File[] files = file1.listFiles();
for (File file : files) {
//是文件
if (file.isFile()){
File file3 = new File(file2.getAbsolutePath() + "\\" + file.getName());
file3.createNewFile();
FileInputStream fileInputStream= new FileInputStream(file);
FileOutputStream fileOutputStream = new FileOutputStream(file3);
int len;
byte[] bytes=new byte[1024];
while ((len=fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
fileInputStream.close();
fileOutputStream.close();
}
//是目录
else {
File file3 = new File(file2.getAbsolutePath() + "\\" + file.getName());
file3.mkdir();
//file是chenhao子目录。file3是新建的目录
copyDir(file,file3);
}
}
}
}
6. 复制一个MP3文件
要求:将D盘根目录下的src.mp3文件复制到同一目录下并命名为des.mp3
package homework;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestMp3 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\2022maxue\\src.mp3");
File file2 = new File(file1.getParent()+"\\des.mp3");
file2.createNewFile();
FileInputStream inputStream = new FileInputStream(file1);
FileOutputStream outputStream = new FileOutputStream(file2);
int len;
byte[] bytes = new byte[1024];
while ((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
inputStream.close();
outputStream.close();
}
}
7. 使用缓冲流实现文件的复制。
package homework;
import java.io.*;
public class TestBuffered {
public static void main(String[] args) throws IOException {
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("copy.txt"));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("copy1.txt"));
int len;
byte[] bytes = new byte[1024];
while ((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
inputStream.close();
outputStream.close();
}
}
8. 获取一个文件夹下所有指定后缀名(.java)的文件(包括子文件夹中的内容),并将这些文件的绝对路径写入到一个文本文件中
package homework;
import java.io.*;
public class TestJavaName {
public static void main(String[] args) throws IOException {
File file = new File("D:\\2022maxue\\JAVA\\javalearn");
printName(file);
}
private static void printName(File file) throws IOException {
FileOutputStream outputStream = new FileOutputStream("D:\\2022maxue\\JAVA\\javalearn.txt", true);
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isFile()){
if (file1.getName().endsWith(".java")){
outputStream.write((file1.getAbsolutePath()+"\r\n").getBytes());
}
}
else {
printName(file1);
}
}
outputStream.close();
}
}