-------
android培训、
java培训、期待与您交流! ----------
- package com.gotoheima;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.Reader;
- /**
- * 编写一个类,增强java.io.BufferedReader的ReadLine()方法,使之在读取某个文件时,能打印出行号。
- *
- * 就是一个模拟BufferedReadLine的程序
- * 定义一个计数器,定义Reader
- * 模拟ReadLine方法,当读取一行,计数器+1,遇到\r\n就表示应该换行
- * 关闭缓冲区
- *
- */
- public class Test1
- {
- public static void main(String[] args)
- {
- MyLineNumReader mnr = null;
- try
- {
- mnr = new MyLineNumReader(new FileReader("Test.txt"));
- String line = null;
- while ((line = mnr.myReadLine()) != null)
- {
- System.out.println(mnr.getCount()+":\t"+line);
- }
- }
- catch (IOException e)
- {
- System.out.println("读写错误");
- }
- finally
- {
- try
- {
- if (mnr != null)
- mnr.myClose();
- }
- catch (IOException e)
- {
- System.out.println("流关闭错误");
- }
- }
- }
- }
- //声明一个类,模拟BufferedReader方法
- class MyLineNumReader
- {
- private Reader r;
- private int count;
- //构造函数,使可以被创建对象
- MyLineNumReader(Reader r)
- {
- this.r = r;
- }
- //定义一个myReadLine方法,功能是读取一行数据
- public String myReadLine() throws IOException
- {
- StringBuffer sb = new StringBuffer ();
- int num = 0;
- count ++;
- while ((num = r.read()) != -1)
- {
- if (num == '\r')
- continue;
- if (num == '\n')
- return sb.toString();
- else
- sb.append((char)num);
- }
- if (sb.length() != 0)
- return sb.toString();
- return null;
- }
- //必要的读取属性的方法
- public int getCount() {
- return count;
- }
- 必要的修改属性的方法
- public void setCount(int count) {
- this.count = count;
- }
- //关流方法
- public void myClose() throws IOException
- {
- r.close();
- }
- }
- package com.gotoheima;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.FilenameFilter;
- import java.io.IOException;
- /**
- * 编写程序,将指定目录下所有的.java文件拷贝到另一个目的中,将扩展名改为.txt。
- * 定义一个函数,函数功能是遍历当前目录所有非文件夹的文件
- * 把后缀是.java文件的文件拷贝到另一个文件夹中
- * 修改她们的后缀名为.txt,用String的replace方法。
- *
- */
- public class Test3
- {
- public static void main(String[] args)
- {
- File f = new File("F:\\java\\day20");
- copyFile(f);
- }
- //函数功能:把一个文件夹下面的.java结尾的文件复制到copy文件夹下面并改名
- public static void copyFile(File f)
- {
- //创建一个copy文件加,复制后的文件会被装进来
- File copy = new File("copy");
- copy.mkdir();
- //过滤。java文件
- File[] files = f.listFiles(new FilenameFilter()
- {
- public boolean accept(File f,String name)
- {
- return name.endsWith(".java");
- }
- });
- //复制文件并改名
- for (File fileName : files)
- {
- BufferedInputStream bis = null;
- BufferedOutputStream bos = null;
- try
- {
- bis = new BufferedInputStream(new FileInputStream(fileName));
- //把后缀名.java改成.txt
- String newName = fileName.getName().replace(".java",".txt");
- bos = new BufferedOutputStream(new FileOutputStream(new File(copy,newName)));
- byte[] by = new byte[1024];
- int num = 0;
- while ((num = bis.read()) != -1)
- {
- bos.write(by,0,num);
- }
- }
- catch(IOException e)
- {
- throw new RuntimeException("读写出错");
- }
- finally
- {
- try
- {
- if (bis != null)
- bis.close();
- }
- catch(IOException e)
- {
- throw new RuntimeException("读取关闭出错");
- }
- try
- {
- if (bos != null)
- bos.close();
- }
- catch(IOException e)
- {
- throw new RuntimeException("写入关闭出错");
- }
- }
- }
- }
- }
- package com.gotoheima;
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- /**
- *
- * ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。
- *
- * 这里考察的是反射,获取ArrayList的字节码对象
- * 用Method的方法获取add的字段
- * 绕过编译阶段去添加String类型对象
- *
- */
- public class Test4
- {
- public static void main(String[] args) throws Exception
- {
- ArrayList<Integer> list = new ArrayList<Integer>();
- Method methodAdd = list.getClass().getMethod("add",Object.class);
- methodAdd.invoke(list,"String");
- System.out.println(list);
- }
- }