文本文件的创建、读写,二进制文件(dat)的操作,文件遍历以及按大小排序,简单的正则运算

一. 文本文件的操作
用户会不定期通过键盘输入一些数字,如果输入的数字是-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,那么程序执行完成。请编程实现以下功能:

  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)+" ");
		        }
		       
				 
				
	}
}

程序运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值