4.1 讀入檔案

import java.io.*;
// 2000.10.14 by Chen Ching-Han at MIAT Lab.
class ifstream
{
FileInputStream fin;
File fn;
//
ifstream(String filename)
{
fn=new File(filename);
try
fin=new FileInputStream(fn);
}
catch(FileNotFoundException e)
{
System.out.println("File Not Found");
}
}
//
String read()
{
data;
char ch;
String str="";
boolean flag=true;
do
data=(byte) fin.read();
}while((data<=32 || data==127) && flag==true);
flag=false;
ch=(char)data;
if(data<=32 || data==127) return str;
str=str+ch;
}while(data!=-1);
catch(IOException e)
{
System.out.println("Read File Error");
}
return null;
}
//
void close()
{
try
fin.close();
catch(IOException e)
{
System.out.println("Close File Error");
}
}
//
int rInt()
{
return Integer.valueOf(read()).intValue();
}
//
float rFloat()
{
return Float.valueOf(read()).floatValue();
}
//
double rDouble()
{
return Double.valueOf(read()).doubleValue();
}
}
//-------------------------------------------------------------

下載 ifstream.java

練習6_1

使用記事本輸入4行資料,分別是字串、整數、浮點數、double數,寫一程式將資料讀入,再將其輸出至螢幕。

ifstream in1=new ifstream("data.txt");
n1=in1.rInt();

或(讓使用者輸入檔名)

System.out.println(" 輸入檔案名稱 : ");
ConsoleReader console = new ConsoleReader(System.in);
filename = console.readLine();
ifstream in1=new ifstream(filename);
n1=in1.rInt();


4.2 寫入檔案

import java.io.*;
import java.lang.*;
// 2000.10.14 by Chen Ching-Han at MIAT Lab.
class ofstream
{
File fn;
RandomAccessFile fout;
//
ofstream(String filename)
{
fn=new File(filename);
if(fn.exists()) fn.delete();
try
fout=new RandomAccessFile(filename,"rw");
}
catch(IOException e)
{
System.out.println("Create File Error!");
return;
}
//
//input
檔名 , 如果存在是否刪 RandomfileRandomfile (true or false)
ofstream(String filename,boolean d)
{
fn=new File(filename);
if (d==false && fn.exists())
{
fout=new RandomAccessFile(filename,"rw");
}
catch(FileNotFoundException e)
{
System.out.println("File Not Found");
return;
if(fn.exists())fn.delete();
fout=new RandomAccessFile(filename,"rw");
}
catch(IOException e)
{
System.out.println("Create File Error!");
return;
}
//
void wDouble(double f)
{
String str;
str=Double.toString(f);
wString(str);
}
//
//
將檔案寫入一個浮點數
void wFloat(float f)
{
String str;
str=Float.toString(f);
wString(str);
}
//
//將檔案寫入一個整數
void wInt(int i)
{
String str;
str=Integer.toString(i);
wString(str);
}
//
//將檔案寫入一個跳行
void wln()
{
wByte(13);
wByte(10);
}
//
//將檔案寫入一個 tab
void wTab()
wByte(9);
}
//
//
將檔案寫入一個 String
void wString(String str)
{
try
fout.seek(fout.length());
l=str.length();
for(int j=0;j<l;j++)
{
fout.writeByte((byte)str.charAt(j));
catch(IOException e)
{
System.out.println("Write File Error!");
return;
void wChar(char c)
{
fout.seek(fout.length());
fout.writeChar(c);
catch(IOException e)
{
System.out.println("Write File Error!");
return;
}
//
void wByte(int b)
{
fout.seek(fout.length());
fout.writeByte(b);
catch(IOException e)
{
System.out.println("Write File Error!");
return;
}
void close()
{
fout.close();
catch(IOException e)
{
System.out.println("Close File Error");
}
}
}
//-------------------------------------------------------------

下載 ofstream.java

練習6.2

寫一程式分別將字串、整數、浮點數、double數資料寫入一個檔案,再使用練習6.1程式將其讀出驗證。

ofstream out=new ofstream("title.txt");

out.wString(" 義守大學  電機系 ");

out.wln();

float pi=3.14159;

out.wFloat(pi);

..........

本章練習1:

請自行產生一個6列資料(含標題)的純文字檔,名為score.txt,其格式為:第一列為4個字串的標題,第二列以後的每一列的第一項資料為字串、第二、三、四項資料為整數,請將資料從檔案讀入,並輸出到螢幕。

資料檔範例如下:

姓名       國文  英文  數學

陳水扁    90       75

......................

class ex

public static void main (String args[])

ifstream in1=new ifstream("data.txt");

ofstream out=new ofstream("result.txt");

String

for(int i=0;i<4;i++)

str=in1.read();

System.out.print(str+"\t");

out.wString(str);

out.wTab();

out.wln();

str=in1.read();

System.out.print("\n"+str+"\t");

out.wString(str);

out.wTab();

[]x = new int[3];

for(int i=0;i<3;i++)

x[i]=in1.rInt();

System.out.print(x[i]+"\t");

out.wInt(x[i]);

out.wTab();

本章練習2:

download stock.txt

練習時間序列資料處理。

class ex

public static void main (String args[])

ifstream in1=new ifstream("stock.txt");

ofstream out=new ofstream("result.txt");

String [] str = new String[319];

float [] x =new float[319];

for(int i=0;i<319;i++)

str[i]=in1.read();

x[i]=in1.rFloat();

//        System.out.print(str[i]+"\t"+x[i]+"\n");

float max,min;

max=x[0];

min=x[0];

for(int i=0;i<319;i++)

if(x[i]>max)max=x[i];

if(x[i]<min)min=x[i];

System.out.print("max="+max+"\nmin="+min);

for(int i=0;i<319;i++)

x[i]=(x[i]-min)/(max-min);

out.wString(str[i]);

out.wTab();

out.wFloat(x[i]);

out.wln();

本章練習3:

請使用相同的資料檔,計算時間序列的5點的平均濾波、微分和積分。例

5點的平均濾波:

float [] y;
y = new float[319];
float [] filter={0.2f,0.2f,0.2f,0.2f,0.2f};
for(int i=0;i<2;i++)y[i]=x[i];
for(int i=317;i<319;i++)y[i]=x[i];
for(int i=2;i<319-2;i++)
y[i]=0;
for(int j=0;j<5;j++)
y[i]=y[i]+x[i+j-2]*filter[j];