2013年6月4日 星期二

二進位檔案讀寫實作

bio0604將資料輸入到2進位檔案pdata.txt裡面
import java.io.*;

class bio0604{
 public static void main(String[] args) throws IOException
 {
  DataOutputStream dout= new DataOutputStream (
   new BufferedOutputStream(
    new FileOutputStream("pdata.txt")));   // set filename

  dout.writeChars("M00031");  // output id (String)
  dout.writeChar('M');                // output gender (char)
  dout.writeInt(85);                      // output score1 (int)
  dout.writeDouble(0.27);                    // output weight1 (double)
  dout.writeInt(76);                      // output score2 (int)
  dout.writeDouble(0.33);                    // output weight2 (double)
  dout.writeInt(81);                      // output score3 (int)
  dout.writeDouble(0.4);                    // output weight3 (double)


  dout.writeChars("M00037");  // output id (String)
  dout.writeChar('F');                // output gender (char)
  dout.writeInt(62);                      // output score1 (int)
  dout.writeDouble(0.27);                    // output weight1 (double)
  dout.writeInt(54);                      // output score2 (int)
  dout.writeDouble(0.33);                    // output weight2 (double)
  dout.writeInt(50);                      // output score3 (int)
  dout.writeDouble(0.4);                    // output weight3 (double)

  dout.flush();
  dout.close();
  





 }
}




bout0604從pdata.txt將2進位檔案解析並印出
import java.io.*;

class bout0604{
 public static void main(String[] args) throws IOException
 {
  DataInputStream din= new DataInputStream (
   new BufferedInputStream(
    new FileInputStream("pdata.txt")));   // set filename

  char[] in=new char[6];
  char gen,star;
  int sc1,sc2,sc3;
  double w1,w2,w3,fin;
  String ss;

  for(int i=0;i<6;i++) in[i]=din.readChar();  // output id (String)
  gen=din.readChar();                // output gender (char)
  sc1=din.readInt();                      // output score1 (int)
  w1=din.readDouble();                    // output weight1 (double)
  sc2=din.readInt();                      // output score2 (int)
  w2=din.readDouble();                    // output weight2 (double)
  sc3=din.readInt();                      // output score3 (int)
  w3=din.readDouble();                    // output weight3 (double)
  
  ss= new String(in);
  if(gen=='M') star='*';
  else star=' ';
  fin=(int)((sc1*w1+sc2*w2+sc3*w3)*100)/100.0;
  System.out.println(ss+star+" "+sc1+" "+sc2+" "+sc3+" "+fin);



  for(int i=0;i<6;i++) in[i]=din.readChar();  // output id (String)
  gen=din.readChar();                // output gender (char)
  sc1=din.readInt();                      // output score1 (int)
  w1=din.readDouble();                    // output weight1 (double)
  sc2=din.readInt();                      // output score2 (int)
  w2=din.readDouble();                    // output weight2 (double)
  sc3=din.readInt();                      // output score3 (int)
  w3=din.readDouble();                    // output weight3 (double)
  
  ss= new String(in);
  if(gen=='M') star='*';
  else star=' ';
  fin=(int)((sc1*w1+sc2*w2+sc3*w3)*100)/100.0;
  System.out.println(ss+star+" "+sc1+" "+sc2+" "+sc3+" "+fin);

  din.close();

 }
}




以上為兩比資料分為同時寫入pdata.txt以及同時讀出,以下合併成一個程式碼
import java.io.*;

class bfix0604{
 public static void main(String[] args) throws IOException
 {
  DataOutputStream dout= new DataOutputStream (
   new BufferedOutputStream(
    new FileOutputStream("pdata.txt")));   // set filename

  dout.writeChars("M00031");  // output id (String)
  dout.writeChar('M');                // output gender (char)
  dout.writeInt(85);                      // output score1 (int)
  dout.writeDouble(0.27);                    // output weight1 (double)
  dout.writeInt(76);                      // output score2 (int)
  dout.writeDouble(0.33);                    // output weight2 (double)
  dout.writeInt(81);                      // output score3 (int)
  dout.writeDouble(0.4);                    // output weight3 (double)


  dout.writeChars("M00037");  // output id (String)
  dout.writeChar('F');                // output gender (char)
  dout.writeInt(62);                      // output score1 (int)
  dout.writeDouble(0.27);                    // output weight1 (double)
  dout.writeInt(54);                      // output score2 (int)
  dout.writeDouble(0.33);                    // output weight2 (double)
  dout.writeInt(50);                      // output score3 (int)
  dout.writeDouble(0.4);                    // output weight3 (double)

  dout.flush();
  dout.close();
  

  DataInputStream din= new DataInputStream (
   new BufferedInputStream(
    new FileInputStream("pdata.txt")));   // set filename

  char[] in=new char[6];
  char gen,star;
  int sc1,sc2,sc3;
  double w1,w2,w3,fin;
  String ss;

  for(int i=0;i<6;i++) in[i]=din.readChar();  // output id (String)
  gen=din.readChar();                // output gender (char)
  sc1=din.readInt();                      // output score1 (int)
  w1=din.readDouble();                    // output weight1 (double)
  sc2=din.readInt();                      // output score2 (int)
  w2=din.readDouble();                    // output weight2 (double)
  sc3=din.readInt();                      // output score3 (int)
  w3=din.readDouble();                    // output weight3 (double)
  
  ss= new String(in);
  if(gen=='M') star='*';
  else star=' ';
  fin=(int)((sc1*w1+sc2*w2+sc3*w3)*100)/100.0;
  System.out.println(ss+star+" "+sc1+" "+sc2+" "+sc3+" "+fin);



  for(int i=0;i<6;i++) in[i]=din.readChar();  // output id (String)
  gen=din.readChar();                // output gender (char)
  sc1=din.readInt();                      // output score1 (int)
  w1=din.readDouble();                    // output weight1 (double)
  sc2=din.readInt();                      // output score2 (int)
  w2=din.readDouble();                    // output weight2 (double)
  sc3=din.readInt();                      // output score3 (int)
  w3=din.readDouble();                    // output weight3 (double)
  
  ss= new String(in);
  if(gen=='M') star='*';
  else star=' ';
  fin=(int)((sc1*w1+sc2*w2+sc3*w3)*100)/100.0;
  System.out.println(ss+star+" "+sc1+" "+sc2+" "+sc3+" "+fin);

  din.close();



 }
}


沒有留言:

張貼留言