一. 文本文件的操作
用户会不定期通过键盘输入一些数字,如果输入的数字是-1,那么程序执行完成。请编程实现以下功能:
将用户的数据带上时间戳,写入一个文本文件中
package projext2;
/*用户会不定期通过键盘输入一些数字,如果输入的数字是-1,那么程序执行完成。
* 将用户的数据带上时间戳,写入一个文本文件中
*/
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;
public class WriteFile {
public static void main(String[] args)
{
String fileName="D:/koko.txt";
try
{
//使用这个构造函数时,如果存在koko.txt文件,
//则直接往kuka.txt中追加字符串
//没有创建一个koko.txt文件
File file = new File(fileName);
if(file.exists()){
file.delete();
FileWriter writer= new FileWriter(fileName);
}
FileWriter writer= new FileWriter(fileName,true);
System.out.println("输入数字:");
Scanner str = new Scanner(System.in);
double i = str.nextDouble();
while (i != -1)
{
writer.write(i+"\t"+new Date().getTime()+"\n");
System.out.println("输入数字:");
Scanner str1 = new Scanner(System.in);
i = str.nextDouble();
}
writer.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
程序运行结果:
二.二进制文件的操作
用户会不定期通过键盘输入一些数字(默认为整形),如果输入的数字是-1,那么程序执行完成。请编程实现以下功能:
- 将用户的数据以二进制形式写入一个dat文件
package projext2;
/*用户会不定期通过键盘输入一些数字,如果输入的数字是-1,那么程序执行完成。
* 将用户的数据带上时间戳,写入一个文本文件中
*/
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;
public class WriteFile {
public static void main(String[] args)
{
String fileName="D:/koko.txt";
try
{
//使用这个构造函数时,如果存在koko.txt文件,
//则直接往kuka.txt中追加字符串
//没有创建一个koko.txt文件
File file = new File(fileName);
if(file.exists()){
file.delete();
FileWriter writer= new FileWriter(fileName);
}
FileWriter writer= new FileWriter(fileName,true);
System.out.println("输入数字:");
Scanner str = new Scanner(System.in);
double i = str.nextDouble();
while (i != -1)
{
writer.write(i+"\t"+new Date().getTime()+"\n");
System.out.println("输入数字:");
Scanner str1 = new Scanner(System.in);
i = str.nextDouble();
}
writer.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
程序运行结果:
2. 读取该文件,实现正序和逆序排序,分别打印出来
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class shengxujiangxu {
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
String fileName="d:/kuka1.dat";
try {
@SuppressWarnings("resource")
DataInputStream out = new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));
String sum = out.readLine();//一行一行的读数据
ArrayList<String> array = new ArrayList<String>();
System.out.println("正序:");
while (sum != null)
{
array.add(sum);
System.out.println(sum);
sum = out.readLine();
}
System.out.println("倒序:");
Collections.reverse(array);
for (String s:array)
{
System.out.println(s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
程序运行结果:
三.文件夹的操作
请用2种方法实现对某文件夹的遍历,按照文件的大小进行排序并打印
package projext2;
import java.io.*;
import java.util.*;
public class task {
public static void main(String[] args)
{
String fileName = "d://kuka";
System.out.println("使用循环方法:");
orderByLength(fileName);
System.out.println("使用迭代器方法:");
orderByLength1(fileName);
}
//循环
public static void orderByLength(String fliePath) {
List< File> files = Arrays.asList(new File(fliePath).listFiles());
Collections.sort(files, new Comparator< File>() {//重写Collection和equal方法重写来比较文件大小,并按大小排序
public int compare(File f1, File f2) {
long diff = f1.length() - f2.length();
if (diff > 0)
return 1;
else if (diff == 0)
return 0;
else
return -1;
}
public boolean equals(Object obj) {
return true;
}
});
for (File f : files) {
if(f.isDirectory()) continue;//当文件夹路径下所有文件
System.out.println(f.getName()+":"+f.length());//获得文件下文件和大小
}
}
public static void orderByLength1(String fliePath) {
List< File> files = Arrays.asList(new File(fliePath).listFiles());
Collections.sort(files, new Comparator< File>() {
public int compare(File f1, File f2) {
long diff = f1.length() - f2.length();
if (diff > 0)
return 1;
else if (diff == 0)
return 0;
else
return -1;
}
public boolean equals(Object obj) {
return true;
}
});
Iterator<File> it1 =files.iterator();//使用List的迭代器
while(it1.hasNext())
{
File f = it1.next() ;//its.next()获得的是文件路径名。使用getName()获得文件名
System.out.println(f.getName()+":"+ f.length());
}
}
}
程序运行结果:
四、【正则表达式】
1. 判断用户输入的座机是否为长沙的座机号码
2. 将用户输入的一段英文字母中以a开头的单词全部提取出来
3. 给出一个淘宝的共享链接,把网址提取出来
4. 给出字符串”12-34,56 78-90”,每个数字可能用短横,逗号,空格分开。用正则表达式的方法将这些数字提取出来并排序打印(这些数字都是16进制)
package projext2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class zhengce {
@SuppressWarnings("static-access")
public static void main(String[] args)
{
// 判断是不是长沙的号码
String ptnStr1 = "^0731-?8\\d{7}$";
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<2;i++)
{
System.out.println("输入长沙的座机号码:");
String userStr;
try {
userStr = br1.readLine();
boolean isMatch = Pattern.matches(ptnStr1, userStr);
if(isMatch) {
System.out.println(userStr+"是长沙号码");
}
else {
System.out.println(userStr+"不是长沙号码");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//将用户输入的一段英文字母中以a开头的单词全部提取出来
System.out.println("输入一段英文:");
Scanner str = new Scanner(System.in);//Scanner输入的长度有限
String myStr1= str.nextLine();
System.out.println(myStr1);
String reg = "[a][a-zA-Z]*";
Pattern ptn= Pattern.compile(reg);
Matcher mat = ptn.matcher(myStr1);
while(mat.find())
System.out.println(mat.group());
//给出一个淘宝的共享链接,把网址提取出来
String myStr2="付致这行话$AXaO1QLVOja$转移至淘宀┡ē【原创设计森女部落节气小暑古风仙女裙吊带雪纺裙子2020夏季新款】;或https://m.tb.cn/h.Vhcjg43?sm=382c74 點击鏈→接,再选择瀏..覽..噐大开";
String reg1 = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
Pattern ptn1= Pattern.compile(reg1);
Matcher mat1 = ptn1.matcher(myStr2);
while(mat1.find())
System.out.println(mat1.group());
//给出字符串”12-34,56 78-90”,每个数字可能用短横,逗号,空格分开。用正则表达式的方法将这些数字提取出来并排序打印(这些数字都是16进制)
String myStr3 = "12-34,56 78-90";
HashMap<Integer,String> list = new HashMap<Integer,String>();
System.out.println("提取出来:");
for (String item:myStr3.split("[-, ]"))
{
System.out.print(item+" ");
list.put(Integer.parseInt(item, 16), item);
}
Set set= list.keySet();
Object[] arr=set.toArray();
Arrays.sort(arr);
System.out.println("\n排序打印:");
for(Object key:arr){
System.out.print(list.get(key)+" ");
}
}
}
程序运行结果: