首页 > 代码库 > 一些基础Java习题

一些基础Java习题

1、 在文本文件book.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数

package iowork;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**2014-11-15
 * @author Administrator
 *1、	在文本文件book.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数
 */
public class ReadTxt {
	public static void main(String[] args) {
		File file=new File("D:/book.txt");
		 // 创建文件
	    if (!file.exists()) {
	        try {
	        	file.createNewFile();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
	    try {
			FileInputStream fis=new FileInputStream(file);
			int c=fis.read();
	        int count=0;
			for(int i=0;i<file.length();i++){
		        char ch = (char)(fis.read());  //循环读取字符
		        if(ch=='A'){
		        	count++;
		        }
//		        System.out.print(ch);
			}
			System.out.println("共"+count+"个A");
			fis.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
		      System.out.println("文件打开失败。");
			e.printStackTrace();
		}
	}
}
2、 把一个文件中的内容读出,把大写字母转换成小写字母后输出到另一个文件中

package iowork;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**2014-11-15
 * @author Administrator
 *2、	把一个文件中的内容读出,把大写字母转换成小写字母后输出到另一个文件中
 */
public class Work2 {
	public static void main(String[] args) throws IOException {
		String txtFilePath = "d:/book.txt";//原文件
		FileInputStream fis = new FileInputStream(new File(txtFilePath));
		InputStreamReader isr = new InputStreamReader(fis,"GBK");
		BufferedReader reader = new BufferedReader(isr);

		String otherTxtFilePath = "d:/book_lower.txt";//保存小写的文件
		FileOutputStream fos = new FileOutputStream(new File(otherTxtFilePath));
		OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK");
		BufferedWriter writer = new BufferedWriter(osw);
		
		String line = null;
		while((line = reader.readLine()) != null){
			writer.append(line.toLowerCase()).append("\r\n");
		}
		
		writer.close();
		reader.close();
	}
}


3、 编写一个程序,检测本地是否存在保存保存学生的对象(反序列化),如果存在则在控制台输出学生信息(反序列化),如果没有,则先通过Student创建学生对象,将学生信息输出并保存到本地文件(序列化)中。

package iowork;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**2014-11-15
 * @author Administrator
 *3、	编写一个程序,检测本地是否存在保存保存学生的对象(反序列化),如果存在则在控制台输出学生信息(反序列化),
 *如果没有,则先通过Student创建学生对象,将学生信息输出并保存到本地文件(序列化)中。
 */
public class Work3 implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		/*
		 * 文件为E盘下的student.txt文件
		 */
		ObjectOutputStream output = null;
		Object obj = null;
		
		//如果捕获到异常,说明文件中没有存储任何对象
		try{
			ObjectInputStream  input  = new ObjectInputStream(new FileInputStream(new File("E:\\student.txt"))); 
			obj = input.readObject();
		} catch(Exception EOFException){
			System.out.println("没有存储学生对象");
		} 
		System.out.println(obj);
		if(obj instanceof Work3){
			//如果没有异常并且存储的为学生对象
			Work3 student = (Work3)obj;
			System.out.println("已保存的学生的姓名为: " + student.getName());
		}else {
			//如果没有异常但存储的不是学生对象
			Work3 s = new Work3();
			s.setName("张三");
			output = new ObjectOutputStream(new FileOutputStream(new File("E:\\student.txt")));
			output.writeObject(s);
			System.out.println("学生信息已保存");
		}
	}
}
4、 请编写一个类,类名为SubThread,  是Thread 类的子类。该类中定义run()方法,方法中有一个 for循环,循环一共进行5次,循环体先在命令行显示该线程循环了第几次,然后休眠半秒的时间,循环结束后显示线程结束信息:线程名+finished。  编写一个Application程序,并在其中创建 Sub Thread类的三个线程对象T1,T2,T3,他们的名称分别为Frist,Second,Third,并启动这三个线程

package iowork;

/**2014-11-15
 * @author Administrator
 *4、	请编写一个类,类名为SubThread,  是Thread 类的子类。该类中定义run()方法,方法中有一个 for循环,
 *循环一共进行5次,循环体先在命令行显示该线程循环了第几次,然后休眠半秒的时间,
 *循环结束后显示线程结束信息:线程名+finished。  编写一个Application程序,
 *并在其中创建 Sub Thread类的三个线程对象T1,T2,T3,
 * 他们的名称分别为Frist,Second,Third,并启动这三个线程
 */
public class SubThread extends Thread{
	public void run(){
			try {
				for(int i=0;i<5;i++){
					System.out.println("该线程循环了"+i+"次");
				Thread.sleep(500);
				System.out.println(i+"线程finished");
				}
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	public static void main(String[] args) {
		//三个线程
        Thread t1 = new Thread(new SubThread());  //第一个自定义线程
        Thread t2 = new Thread(new SubThread());  //第二个自定义线程
        Thread t3 = new Thread(new SubThread());  //第二个自定义线程
        t1.start();
        t2.start();
        t3.start();
	}
}

5.多线程求素数

package work5;

public class CalcPrime {
	public static void main(String[] args) {
		Thread1 t1 = new Thread1();
		Thread2 t2 = new Thread2();
		Thread3 t3 = new Thread3();

		t1.start();
		t2.start();
		t3.start();
	}
}

class Thread1 extends Thread {
	Thread4 t4 = Thread4.getInstance();

	public void run() {
		String str1 = PrimeHandler.getInstance().getPrimeNums(1000, 10000);
		t4.accept(str1);
	}
}

class Thread2 extends Thread {
	Thread4 t4 = Thread4.getInstance();

	public void run() {
		String str2 = PrimeHandler.getInstance().getPrimeNums(10001, 20000);
		t4.accept(str2);
	}
}

class Thread3 extends Thread {
	Thread4 t4 = Thread4.getInstance();

	public void run() {
		String str3 = PrimeHandler.getInstance().getPrimeNums(20001, 30000);
		t4.accept(str3);
	}
}

class Thread4 extends Thread {

	private static int isEnd = 0;
	private static Thread4 t4;

	private Thread4() {
	}

	public static Thread4 getInstance() {
		if (t4 == null) {
			t4 = new Thread4();
		}
		return t4;
	}

	public void run() {
		while (isEnd == 3) {
			PrintHandler.destroy();
		}
	}

	public void accept(String content) {
		PrintHandler.getInstence("xyz.dat").printString(content);
		isEnd++;
	}
}

package work5;

public class PrimeHandler {
	private static PrimeHandler pHandler;

	private PrimeHandler() {
	}

	public static synchronized PrimeHandler getInstance() {
		if (pHandler == null) {
			pHandler = new PrimeHandler();
		}
		return pHandler;
	}

	private static boolean isPrimeNum(int n) {
		boolean hasDivisor = false;
		for (int i = 2; i < n; i++) {
			if (n % i == 0) {
				hasDivisor = true;
			}
		}

		if (hasDivisor) {
			return false;
		} else {
			return true;
		}
	}

	public synchronized String getPrimeNums(int from, int to) {
		StringBuilder strBuilder = new StringBuilder();
		int tag = 1;
		for (int i = from; i <= to; i++) {
			if (isPrimeNum(i)) {
				strBuilder.append(i).append(",");
				if (tag % 15 == 0) {
					strBuilder.append('\n');
				}
				tag++;
			}
		}
		return strBuilder.toString();
	}
}
package work5;

public class PrimeHandler {
	private static PrimeHandler pHandler;

	private PrimeHandler() {
	}

	public static synchronized PrimeHandler getInstance() {
		if (pHandler == null) {
			pHandler = new PrimeHandler();
		}
		return pHandler;
	}

	private static boolean isPrimeNum(int n) {
		boolean hasDivisor = false;
		for (int i = 2; i < n; i++) {
			if (n % i == 0) {
				hasDivisor = true;
			}
		}

		if (hasDivisor) {
			return false;
		} else {
			return true;
		}
	}

	public synchronized String getPrimeNums(int from, int to) {
		StringBuilder strBuilder = new StringBuilder();
		int tag = 1;
		for (int i = from; i <= to; i++) {
			if (isPrimeNum(i)) {
				strBuilder.append(i).append(",");
				if (tag % 15 == 0) {
					strBuilder.append('\n');
				}
				tag++;
			}
		}
		return strBuilder.toString();
	}
}

6.遍历文件夹内容
package iowork;
 
import java.io.File;
 
public class Work6 {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("C:\\迅雷下载\\");
        printFile(file,0);
 
    }
     
    /**
     * 输出文件树
     * @param file
     * @param l
     */
    public static void printFile(File file,int l){
        String str = new String();  //生成补充空格
        for(int i=0;i<l;i++){
            str +=" " ;
        }
        //先输出自己后输出子目录或文件
        formatPrint(file,str);
         
        if(file.isDirectory()){  //判断是否为目录
            File[] files = file.listFiles();  //获取目录下文件列表
            for(File f:files){//递归输出文件
                printFile(f,l+3);
            }
             
        }
    }
     
    /**
     * 格式化输出文件
     * @param file
     * @param str
     */
    public static void formatPrint(File file,String str){
        //先输出文件
        String[] names = file.getName().split("[.]");
        System.out.println(str+file.getName()  
                + "       "+names[names.length-1]+" 文件"
                + "       "+file.length());
    }
 
}


一些基础Java习题