【Java实验3】文件输入输出流对文件进行读写的方法

该文介绍了两个Java程序,一是创建一个名为TimerAlarm的线程类,实现秒表功能,不依赖内置Timer类,按时分秒格式显示并打印总秒数。二是利用输入输出流读取words.txt文件内容,倒序保存到newwords.txt,同时为每个单词编号,处理可能的FileFoundException。
摘要由CSDN通过智能技术生成

实验内容

1、创建类TimerAlarm,让它继承Thread并实现一个秒表的功能,不要使用内置的Timer类,先按照时:分:秒打印时间,然后换一行打印总的秒数。

2、使用输入输出流,将文件words.txt 文件内容读出,然后以倒序的方式重新保存在新的文件newwords.txt里面,并为每个单词编号。如果在保存的时候newwords文件已经存在,应该产生FileFundException,并将其捕获处理。

程序源码

1

import java.util.Scanner;

public class TimerAlarm {
	public static void main(String[] args) {
		Timer t1 = new Timer();  //新建子线程
		t1.start();   //启动线程
	}
}

class Timer extends Thread{
	Object lock = new Object();
	int min=0,sec=0,hou=0;
	int n;   //用于返回秒数
	boolean pause = false;  //阻塞标志
	
	void pauseThread() {  //将阻塞信号开启
        this.pause = true;   
    }
	
	void show() {    //打印总秒数
		System.out.println(hou+":"+""+min+":"+sec);
		int n=(hou*3600+min*60+sec);  
		System.out.print(" "+n+'\n');
	}
	
	void OnPause() {  //阻塞方法
        synchronized (lock) {
            try {
                lock.wait();  //阻塞线程方法
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
	
	 public void run() {
         super.run();
         while (true) {
             if (pause) {            
                 OnPause();
             }
             try { 
            	     sec++;
            	     show();	//每加一秒打印一次            	
		         if(sec==60) {sec=0;min++;}   //60秒后,分钟加1,秒数清零
		         if(min==60){min=0;sec=0;hou++;} 
//60分钟后,小时加1, 秒和分钟清零
                 Thread.sleep(1000);              
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
 }

2

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class InOut {
private static final String NUll = null;  
//将null强制转换为String类,不抛出异常
public static void main(String[] args) throws IOException {
                            //throws是方法可能抛出异常的声明
    	    BufferedReader br = null;
		BufferedWriter bw = null;
		try {
			br = new BufferedReader(new FileReader("words.txt"));
			bw = new BufferedWriter(new FileWriter("newwords.txt")); 
	        ArrayList<String> list = new ArrayList<>(); //创建动态数组对象
	        String line;
	        while((line = br.readLine()) != NUll){
	            list.add(line);  //向集合列表中添加对象
	        }
	        int j=1;
	        for(int i=list.size()-1 ;i>= 0 ;i--){
	        	    bw.write(j+".");    //写入每个单词的序号
	            bw.write(list.get(i));     //将单词以倒序的方式写入文件
	            bw.newLine();       //换行
	            j++;
	        }
	        bw.flush();   //刷新缓冲流
	        br.close();   //关闭文件
	        bw.close();
		} catch (FileNotFoundException e) {
			System.out.println("找不到指定文件!");
		}catch (IOException e) {
			e.printStackTrace();    //在命令行打印异常信息
		}
    }
}

程序运行结果

1

2
在这里插入图片描述

总结


  第一问提到了线程阻塞。线程阻塞通常是指⼀个线程在执⾏过程中暂停,以等待某个条件的触发,可以不用占用CPU资源。
  第二问没有太大难度,只要掌握对文件基本读写的方法和步骤就可以。还有就是一定要掌握文件处理过程中异常处理的方法,因为程序运行中可能出现各种意外情况,异常处理可以提高程序运行效率。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会举重的薯片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值