做好了第一个程序~

   操作系统课上留的作业,终于完成一个了~应该说,基本完成,还是有点点瑕疵,等到上机的时候要修改一下~
   其实听起来很简单,3个线程,一个从文件读数据,一个修改数据,一个将数据写到文件。但现在的我,对于io和thread的掌握还差很多,边学边做,浪费了一些时间,但收获也颇丰~
   谈谈这次编成的收获:
  1.API很重要,学会查API会有极大帮助                                       
  2.对于io有初步认识,了解了一些最基本的方法,但由于知道的API较少,有时候容易陷入迷惑~
  3.对于线程,看了看Doug Lea的书,完全看不懂,有必要以后多看,线程是一把双刃剑,很有可能就用的不正确,但掌握之后,便是极其“爽”~尤其其同步问题,是一个很值得钻研的问题
---------------------------------------------------------------------------------------------
import java.io.*;
public class MainTest {
 
 public static boolean life=true;
 public static long length;                              //文件大小
    public static byte[] buf;                               //缓冲区
    public static int count=0;                             //缓冲区大小
 public static void main(String[] args) throws IOException{
  
  File input=new File("input.txt");
  File output=new File("output.txt");
  
  if(!input.exists()||!output.exists()){
   System.out.println("Error!There is no file to input or output!");
  }
  
  else{   
   ReadT reader=new ReadT(input);
   ModifyT modifyer=new ModifyT();
   WriteT writer=new WriteT(output);
   reader.start();
   modifyer.start();
   writer.start();
  }
  
 }
}
---------------------------------------------------------------------------------------------
/*
 *ReadT类用来读取input文件中的数据
 */

import java.io.*;
public class ReadT extends Thread {
 
    private int Flag=0;                              //用于判断是否已经读取完毕
    private FileInputStream inputFile;               
 
 //构造函数,根据传进来的File对象建立输入流,并且将MainTest中的数据进行初始化
    ReadT(File input){
     //建立输入流,抛出异常
     try{
         inputFile=new FileInputStream(input);
     }
     catch(IOException e){
      System.out.println(e);
      System.exit(1);
     }
     
     MainTest.length=input.length();                       //得到文件大小
     //如果文件什么都没有,那么报错并退出程序
     if(MainTest.length==0){
      System.out.println("Nothing to do!");
      System.exit(1);
     }
     
     MainTest.count=(int)MainTest.length/7;                         //建立缓冲区
     MainTest.buf=new byte[MainTest.count];
    }
   
 public void run(){
  try{
   while((Flag=inputFile.read(MainTest.buf))!=-1){
    System.out.println("ReadT");
    this.yield();
   }
   MainTest.life=false;
   System.out.println("ReadOver!");
   inputFile.close();
  }
     catch(IOException e){
      System.out.println(e);
      System.exit(1);
     }
 }
}
---------------------------------------------------------------------------------------------
/*
 *ModifyT用来修改文件,实现数据+1
 */

public class ModifyT extends Thread{
 
 private Integer tempnumi;
 private int temp;
 private Byte tempnumb;
 public void run(){
  for(int i=0;i<MainTest.count;i++){
   if(!MainTest.life)    return;
  /* tempnumb=new Byte(MainTest.buf[i]);
   temp=tempnumb.intValue();
   temp=temp+1;
   tempnumi=new Integer(temp);
   MainTest.buf[i]=tempnumi.byteValue();  */
   System.out.println("ModifyT");
   this.yield();
  }
 }
}
---------------------------------------------------------------------------------------------
/*
 *WriteT类用来将修改后的文件写入output
 */

import java.io.*;
public class WriteT extends Thread{
 
 private FileOutputStream outputFile;
 WriteT(File output){
        //建立输出流,抛出异常
  try{
   outputFile=new FileOutputStream(output);
  }
  catch(IOException e){
      System.out.println(e);
      System.exit(1);
     }
 }
 
 public void run(){
  try{
   for(int i=0;i<MainTest.count;i++){
    if(!MainTest.life)    return;
    outputFile.write(MainTest.buf);
    System.out.println("WriteT");
    this.yield();
   }
   outputFile.close();
  }
     catch(Exception e){
      System.out.println(e);
      System.exit(1);
     }
 }
}
---------------------------------------------------------------------------------------------
发布了3 篇原创文章 · 获赞 0 · 访问量 1510
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章