8-6. 计算Fibonacii数列,a1=1,a2=1...an=an-1+an-2 即前两个数是1,从3个数开始,每个数是前两个数的和,计算数列的前20项,并用字节文件流的方式输出到一个文件,要求每5项1行。
程序代码如下
import java.io.File;
import java.io.FileOutputStream;
/**
* 计算Fibonacii数列的前20项
*/
public class Fibonacii {
//数列的长度
int i = 0;
int[] f = null;
public Fibonacii(int i) {
this.i = i;
}
/**
* 得到数列的函数
* @return int[]
*/
public int[] getFibonacii() {
if (i < 2) {
return new int[] { 1, 1 };
} else {
f = new int[i];
//给数列赋初值
f[0] = 1;
f[1] = 1;
for (int k = 2; k < i; k++) {
f[k] = f[k - 1] + f[k - 2];
}
return f;
}
}
/**
* 保存入文件
* @param name
*/
public void saveToFile(String name) {
try {
File file = new File(name);
FileOutputStream fo = new FileOutputStream(file);
//换行
int l = '\n';
for (int i = 0; i < 20; i++) {
//每5个一行
if (i != 0 && i % 5 == 0) {
fo.write(l);
}
fo.write(f[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//test and display
public static void main(String[] args) {
int[] fb20 = null;
Fibonacii fb = new Fibonacii(20);
fb20 = fb.getFibonacii();
//打印
for (int i = 0; i < 20; i++) {
System.out.println(fb20[i]);
}
fb.saveToFile("D:\\a.dat");
}
}
8-8. 建立一个文本文件,输入一段短文,编写一个程序,统计文件中字符的个数,并将结果写入另一个文件。
程序代码如下
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
/**
* 统计文件中字符的个数,并将结果写入另一个文件
*/
public class FileCharCounter {
//源文件和目的文件
File fileDec;
String src;
StringBuffer sb = new StringBuffer("");
public FileCharCounter(String dec, String src) {
this.fileDec = new File(dec);
this.src = src;
}
/**
* 统计数目
* @return
*/
public int count() {
try {
sb = new StringBuffer("");
FileReader fr = new FileReader(src);
BufferedReader br = new BufferedReader(fr);
//读数据
String str;
while ((str = br.readLine()) != null) {
sb.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString().length();
}
/**
* 写文件
*/
public void writeTo(){
try {
FileWriter fw=new FileWriter(fileDec);
BufferedWriter bw=new BufferedWriter(fw);
//写数据流
String c=String.valueOf(count());
bw.write(c);
bw.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
//test
public static void main(String[] args){
FileCharCounter fda=new FileCharCounter("d:\\a.txt","d:\\b.txt");
System.out.println(fda.count());
fda.writeTo();
}
}
8-9. 建立一个文本文件,输入学生3门课的成绩,编写一个程序,读入这个文件中的数据,输出每门课的成绩的最小值,最大值和平均值。
程序代码如下
成绩.txt 文件
id#000001 e#98 m#76 p#76
id#000002 e#54 m#74 p#76
id#000003 e#98 m#73 p#78
id#000004 e#98 m#77 p#76
id#000005 e#92 m#45 p#76
id#000006 e#94 m#33 p#74
id#000007 e#98 m#88 p#76
id#000008 e#96 m#34 p#76
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
/**
* 建立一个文本文件,输入学生3门课的成绩 读入这个文件中的数据,输出每门课的成绩的最小值,最大值和平均值。
*/
class Student {
String id;
//英语成绩
float e;
//数字成绩
float m;
//物理成绩
float p;
/**
* @return Returns the e.
*/
public float getE() {
return e;
}
/**
* @param e
* The e to set.
*/
public void setE(float e) {
this.e = e;
}
/**
* @return Returns the id.
*/
public String getId() {
return id;
}
/**
* @param id
* The id to set.
*/
public void setId(String id) {
this.id = id;
}
/**
* @return Returns the m.
*/
public float getM() {
return m;
}
/**
* @param m
* The m to set.
*/
public void setM(float m) {
this.m = m;
}
/**
* @return Returns the p.
*/
public float getP() {
return p;
}
/**
* @param p
* The p to set.
*/
public void setP(float p) {
this.p = p;
}
}
public class CountS {
//文件路径
String filepath;
//list 用来存放学生数据
List list = new ArrayList();
public CountS(String str) {
filepath = str;
init();
}
//初始化操作,用来读数据和解析数据放入相应的对象中
public void init() {
try {
FileReader fr = new FileReader(filepath);
BufferedReader br = new BufferedReader(fr);
//读数据
String str;
while ((str = br.readLine()) != null) {
Student s = new Student();
//解析数据
StringTokenizer st = new StringTokenizer(str.toString(), " ");
//前面是标号,后面是数据
String first = "";
String data = "";
String elem = st.nextToken();
//id 的解析
first = elem.split("#")[0];
data = elem.split("#")[1];
s.setId(data);
//英语成绩
elem = st.nextToken();
first = elem.split("#")[0];
data = elem.split("#")[1];
s.setE(Float.valueOf(data).floatValue());
//数学成绩
elem = st.nextToken();
first = elem.split("#")[0];
data = elem.split("#")[1];
s.setM(Float.valueOf(data).floatValue());
//物理成绩
elem = st.nextToken();
first = elem.split("#")[0];
data = elem.split("#")[1];
s.setP(Float.valueOf(data).floatValue());
//加入list
list.add(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void countAnddisplay(){
//0是最小值,1,最大值 2是平均分
float[] e=new float[]{100,0,0};
float[] m=new float[]{100,0,0};
float[] p=new float[]{100,0,0};
for (Iterator it = list.iterator(); it.hasNext();) {
Student ele = (Student) it.next();
//英语
if(e[0]>ele.getE()){
e[0]=ele.getE();
}
if(e[1]<ele.getE()){
e[1]=ele.getE();
}
e[2]+=ele.getE();
//数学
if(m[0]>ele.getM()){
m[0]=ele.getM();
}
if(m[1]<ele.getM()){
m[1]=ele.getM();
}
m[2]+=ele.getM();
//物理
if(p[0]>ele.getP()){
p[0]=ele.getP();
}
if(p[1]<ele.getP()){
p[1]=ele.getP();
}
p[2]+=ele.getP();
}
//平均分
e[2]=e[2]/list.size();
m[2]=m[2]/list.size();
p[2]=p[2]/list.size();
//打印
System.out.println("英语最小值:"+e[0]+" ");
System.out.println("英语最大值:"+e[1]+" ");
System.out.println("英语平均分:"+e[2]+" ");
System.out.println("数学最小值:"+m[0]+" ");
System.out.println("数学最大值:"+m[1]+" ");
System.out.println("数学平均分:"+m[2]+" ");
System.out.println("物理最小值:"+p[0]+" ");
System.out.println("物理最大值:"+p[1]+" ");
System.out.println("物理平均分:"+p[2]+" ");
}
public static void main(String[] args){
CountS cs=new CountS("d:/成绩.txt");
cs.countAnddisplay();
}
}
8-11. 编写程序,保存一个文本对象并检索对象的数据。
程序代码如下
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 保存一个文本对象并检索对象的数据
*/
public class Contex implements Serializable {
//其中的两个文本对象
String text1 = "";
String text2 = "";
/**
* @return Returns the text1.
*/
public String getText1() {
return text1;
}
/**
* @param text1
* The text1 to set.
*/
public void setText1(String text1) {
this.text1 = text1;
}
/**
* @return Returns the text2.
*/
public String getText2() {
return text2;
}
/**
* @param text2
* The text2 to set.
*/
public void setText2(String text2) {
this.text2 = text2;
}
//for test
public static void main(String[] args) {
Contex c = new Contex();
c.setText1("this is text1");
c.setText2("this is test2");
//将对象保存入文件
File file = new File("d:/temp.dat");
try {
FileOutputStream fo = new FileOutputStream(file);
ObjectOutputStream oo = new ObjectOutputStream(fo);
oo.writeObject(c);
} catch (Exception e) {
e.printStackTrace();
}
//将对象从文件中取出,并操作其数据
Contex d=null;
try {
FileInputStream fo = new FileInputStream(file);
ObjectInputStream oo = new ObjectInputStream(fo);
d=(Contex)oo.readObject();
System.out.println(c);
System.out.println(d);
System.out.println(d.getText1());
System.out.println(d.getText2());
} catch (Exception e) {
e.printStackTrace();
}
}
}
8-13. 改写例8-13使之能打开一个文件对话框,从而播放选取的音频文件。
程序代码如下
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JFileChooser;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
class Sound
{
FileInputStream file;
BufferedInputStream buf;
File filename;
public Sound(File filename)
{
try
{
file=new FileInputStream(filename);
buf=new BufferedInputStream(file);
AudioStream audio=new AudioStream(buf);
AudioPlayer.player.start(audio);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
public class Example8_16 extends Frame implements ActionListener
{
File filename;
Button btn;
Button btn2;
Example8_16()
{
super("音频播放器");
setBounds(300,300,200,100);
setVisible(true);
btn=new Button("播放");
btn2=new Button("选择文件");
setLayout(new FlowLayout());
add(btn);
add(btn2);
btn.addActionListener(this);
btn2.addActionListener(this);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0); }
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btn){
Sound play = new Sound(this.filename);
}else if(e.getSource()==btn2){
JFileChooser fc = new JFileChooser(new File("."));
if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
filename = fc.getSelectedFile();
}
}
}
public static void main(String[] args)
{
new Example8_16();
}
}