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() {
try
{
byte
data; char
ch; String
str=""; boolean
flag=true; do
{
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()) {
try
{
fout=new
RandomAccessFile(filename,"rw"); }
catch(FileNotFoundException
e) {
System.out.println("File
Not Found"); return;
}
}
else
{
if(fn.exists())fn.delete();
try
{
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());
int
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) {
try
{
fout.seek(fout.length());
fout.writeChar(c);
}
catch(IOException
e) {
System.out.println("Write
File Error!"); return;
}
} // void
wByte(int b) {
try
{
fout.seek(fout.length());
fout.writeByte(b);
}
catch(IOException
e) {
System.out.println("Write
File Error!"); return;
}
} void
close() {
try
{
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
60
......................
class ex
{
public static
void main (String args[])
{
ifstream
in1=new ifstream("data.txt");
ofstream
out=new ofstream("result.txt");
String
str;
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();
int
[]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];
}
}
|