java小程序(1)

【文章标题】java小程序(1

【文章作者】曾健生

【作者邮箱】zengjiansheng1@126.com

【作者QQ190678908

【作者声明】本人水平有限,失误之处,敬请各位指出。本人以前写的一些小程序,分享一下希望对各位学习java有帮助 ^-^

*******************************************************************************

题目:

 

/*====第二题====================================

自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,

让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,

能够在读取的每行前面都加上有行号和冒号。

提示:MyBufferedReader,MyLineNumberReader

*/

 

/*====第三题====================================

拷贝一个带内容的文件夹。

*/

 

/*====第四题====================================

编写一个程序,当用户输入一个目录时,

该程序能列出该目录下的所有子目录和文件。

 

*/

 

/*====第五题====================================

有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,

输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),

按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

 

*/

 

/*====第六题====================================

取出D:盘下全部的.java文件的文件路径保存在java.txt文件中

 

*/

 

/*====第七题====================================

计算字符串中子串出现的位置,

例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数

 

 

 

 

/*====第二题====================================

自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,

让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,

能够在读取的每行前面都加上有行号和冒号。

提示:MyBufferedReader,MyLineNumberReader

*/

 

 

import java.io.*;

 

/*

自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,

让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,

能够在读取的每行前面都加上有行号和冒号。

*/

 

class MyLineNumberReader

{

       private Reader r;

       int lineNum=0;

      

       MyLineNumberReader( Reader r )

       {

              this.r=r;

              lineNum=0;

       }

      

       public String readLine() throws Exception

       {

              StringBuffer sb=new StringBuffer();

              int num=0;

              while( (num=r.read())!=-1 )

              {

                     if( num=='/r')

                            continue;

                     else if( num=='/n')

                     {

                            lineNum++;

                            return addLineNum( sb.toString() );

                           

                     }

                     else

                     {

                            sb.append((char)num);

                     }

                          

              }

              if( sb.length()>0 )

              {

                     return sb.toString();

              }

              return null;

       }

      

       public String addLineNum( String s )

       {

              return lineNum+": "+s;

       }

      

       public void close()  throws Exception

       {

              r.close();

       }

}

 

class Demo

{

       public static void main(String args[]) throws Exception

       {

              MyLineNumberReader my=new MyLineNumberReader( new FileReader("upLoadTxt.java"));

              String s=null;

              while( (s=my.readLine())!=null )

              {

                     System.out.println( s );

              }

       }

}

 

 

 

/*====第三题====================================

拷贝一个带内容的文件夹。

*/

 

import java.io.*;

import java.util.*;

 

class CopyFile

{

       String newFileDir; //新的路径

       String srcFileDir;    //原来的目录

       String desFileDir;   //新的目录

       File srcFile;

      

       CopyFile( String srcFileDir,String desFileDir )

       {

              this.srcFileDir=srcFileDir;

              this.desFileDir=desFileDir;

              srcFile=new File(srcFileDir);

       }

      

      

      

       public void start(  ) throws Exception

       {    

              getList( srcFile );

              System.out.println( "d" );

       }

      

      

       private void getList( File f ) throws Exception

       {

             

              File fileList[]=f.listFiles();

              for( int i=0; i<fileList.length; i++ )

              {

                     if( fileList[i].isDirectory() )

                     {

                            copyDirectory( fileList[i] );

                            getList( fileList[i] ) ;                   

                     }

                     else

                     {

                            copyFile( fileList[i] );

                           

                     }

              }

       }

      

       private void copyDirectory( File f )

       {

              File desDirectory=new File( replacePath(f));

              if( !(desDirectory.exists()))

              {

                     desDirectory.mkdir();

              }

              //System.out.println( desDirectory.getAbsolutePath() );

       }

      

       private void copyFile( File f ) throws Exception

       {

              FileOutputStream fos=

                     new FileOutputStream( f );

              File newFile=new File( replacePath(f ));

              newFile.createNewFile();

              FileInputStream fis=

                     new FileInputStream( newFile );

              byte buf[]=new byte[1024];

              int num=0;

              while( (num=fis.read(buf))!=-1 )

              {

                     fos.write(buf,0,num);

              }

              fos.close();

              fis.close();

              //System.out.println( replacePath(f ) );

             

       }

      

       private String replacePath( File f )

       {

              String s=f.getAbsolutePath();

              System.out.println( s );

              s=s.replace( srcFileDir,desFileDir );

              System.out.println( desFileDir );

              System.out.println( srcFileDir );

              System.out.println( s );

              System.out.println( " " );

              return s;

       }

 

}

 

class Demo

{

       public static void main(String args[]) throws Exception

       {

              new CopyFile( "E://zjs//day22","D://zjs").start();

             

       }

      

      

}

 

 

/*====第四题====================================

编写一个程序,当用户输入一个目录时,

该程序能列出该目录下的所有子目录和文件。

思路:

1,获取用户输入的目录,封装成文件对象。

       a.获取输入可以有两种形式,一种通过System.in。另一种通过给主函数传值的形式。

       b.把输入的字符串封装成File对象。对其进行判断。该文件夹是否存在。

2,通过递归的形式列出目录所有文件夹和文件

       a.定义一个功能方法,遍历该文件夹对象,如果遍历到的File对象是文件夹就再次调用该功能方法(递归);

 

*/

 

import java.io.*;

 

class ListFile

{

       private File myFile;

       ListFile(String s)

       {

              myFile=new File(s);

       }

      

       public void startList()

       {

              getList( myFile,0 );

       }

      

       private void getList( File f,int num  )

       {

              num++;

              File fileList[]=f.listFiles();

              for( int i=0; i<fileList.length; i++ )

              {

                     if( fileList[i].isDirectory() )

                     {

                            System.out.println(

                                   getSpace(num)+fileList[i].getName() );

                            getList( fileList[i],num );

                     }

                     else

                     {

                            System.out.println(

                                   getSpace(num)+fileList[i].getName() );

                     }

              }

       }

      

       private String getSpace( int num )

       {

              StringBuffer sb=new StringBuffer();

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

              {

                     sb.append("|-");

              }

              return sb.toString();

       }

      

}

 

class Demo

{

       public static void main(String args[])

       {

      

              ListFile listFile=new ListFile("D://oracle");

              listFile.startList();

       }

      

      

}

 

 

/*====第五题====================================

有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,

输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),

按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

思路:

1,获取键盘录入;

       aSystem.in,为了更好读取键盘录入信息。一行一行的读会更方便,那么将其包装。

       b,BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

2,将获取的键盘录入封装成学生对象(首先要对学生类进行描述。)

       a,读到一行数据,通过该数据的规则(“,”)对数据进行切割。变成字符串数组。并把数组中的学生信息,作为参数,

       封装成学生对象。

3,将风装好的学生对象存入集合中

why?因为要对这些对象中的信息进行操作,用哪个集合呢?既然要排序。而且是存入单个对象。TreeSet,定义比较器。)

       a.建立TreeSet集合,定一个比较器对象传给集合的构造函数。同过集合的add方法,将学生对象存入。

4,对已有元素的TreeSet集合,进行迭代。将其中的学生信息通过流写入到一个文件中。

       a.通过Iterator迭代器,迭代该集合。取出学生对象中要用的信息。作为字符串,用字符流对象(FileWriter

       将其写入到一个文件中。

 

 

*/

 

import java.io.*;

import java.util.*;

 

class Student implements Comparable<Student>

{

       private String name;       //姓名

       private double chineseGrade; //语文

       private double mathGrade; //数学

       private double enGrade; //英语

       private double sum;       //总成绩

      

       Student( String name,

               double chineseGrade,

               double mathGrade,

               double enGrade )

       {

              this.name=name;

              this.chineseGrade=chineseGrade;

              this.mathGrade=mathGrade;

              this.enGrade=enGrade;

              sum=chineseGrade+mathGrade+enGrade;

       }

      

       //获取学生信息

       public String getName()

       {

              return name;

       }

      

       //获取学生总成绩

       public double getSum()

       {

              return sum;

       }

      

       //使类具备比较功能

       public int compareTo( Student s )

       {

              int num=0;

              if( this.getSum()>s.getSum() )

              {

                     num=1;

              }

              else if( this.getSum()==s.getSum() )

              {

                     return this.name.compareTo(s.name);

              }

              else

              {

                     num=-1;

              }

              return num;

       }

             

}

 

//信息处理类,输入学生信息并保存到文件stu.txt

class InfoDeal

{

       private TreeSet<Student> set; //保存学生对象的集合并自动排序

       InfoDeal()

       {

              set=new TreeSet<Student>();

       }

      

       public void start()

       {

              //从键盘上输入学生的信息

              inputInfo();

             

              //将学生信息存放在磁盘文件"stu.txt"

              saveInfoToFile();

             

       }

      

       //从键盘上输入学生的信息

       public void inputInfo()

       {

              BufferedReader br=new BufferedReader(

                     new InputStreamReader( System.in ) );

              String s=null;

              String info[]=null;

             

              try

              {

                     //输入的格式为“学生,语文,数学,英语”

                     while( (s=br.readLine())!=null )

                     {

                            //输入quit后就表示退出

                            if( s.equals("quit") )

                            {

                                   break;

                            }

                            info=s.split( "," );                       

                           

                            /*

                            System.out.println( info[0] );

                            System.out.println( Double.parseDouble(info[1]) );

                            System.out.println( Double.parseDouble(info[2]) );

                            System.out.println( Double.parseDouble(info[3]) );

                            */

                           

                            //把学生信息存放在集合中

                            setStudentInfo( info[0],

                                          Double.parseDouble(info[1]),

                                          Double.parseDouble(info[2]),

                                          Double.parseDouble(info[3]) );

                           

                             

                     }

              }

              catch( Exception e )

              {

                     e.printStackTrace();

                     return;

              }

             

       }

      

       //将学生信息存放在磁盘文件"stu.txt"

       public void saveInfoToFile()

       {

              BufferedWriter bw=null;

              Iterator<Student> i;

              Student stud=null;

              try

              {

                     bw=new BufferedWriter( new FileWriter( "stud.txt" ) );

                     i=set.iterator();

                     while( i.hasNext() )

                     {

                            stud=i.next();

                           

                            //把信息保存到文件中

                            bw.write( stud.getName()+": "+stud.getSum() );

                            bw.newLine();

                            bw.flush();

                     }

                    

              }

              catch( IOException e )

              {

                     e.printStackTrace();

              }

              finally

              {

                     //关闭输入流

                     if( bw!=null )

                     {

                            try

                            {

                                   bw.close();

                            }

                            catch( Exception e )

                            {

                                   e.printStackTrace();

                            }

                     }

              }

       }

      

       //把学生信息保存到集合中

       public void setStudentInfo( String name,

                              double chineseGrade,

                                    double mathGrade,

                                   double enGrade )

       {

              set.add( new Student(   name,

                                   chineseGrade,

                                   mathGrade,

                                   enGrade ) );

       }

                           

}

 

class Demo

{

       public static void main( String args[] )

       {

              new InfoDeal().start();

       }

}

 

 

 

/*====第六题====================================

取出D:盘下全部的.java文件的文件路径保存在java.txt文件中

 

思路:

1.通过递归的方式遍历d:.判断文件的扩展名是否是以.java结尾.

2,把符合条件的File对象都存入到集合中.

3,遍历该集合.通过输出流把文件对象的getAbsolutePath写入到java.txt文件中.

(不存入集合直接写是可以的,但最好临时存储一下.这样就可以对所有的.java文件进行更多的其他操作.)

 

*/

 

 

import java.io.*;

import java.util.*;

 

class ListFile

{

       private File myFile;

       BufferedWriter fw;

       TreeSet<File> set;

       ListFile(String s)

       {

              myFile=new File(s);

              set=new TreeSet<File>();

       }

      

       public void startList() throws Exception

       {

              fw=new BufferedWriter(new FileWriter("java.txt"));

              getList( myFile,0 );

              printPath();

              fw.close();

       }

      

       private void getList( File f,int num  )

       {

              num++;

              File fileList[]=f.listFiles();

              for( int i=0; i<fileList.length; i++ )

              {

                     if( fileList[i].isDirectory() )

                     {

                           

                            getList( fileList[i],num );

                     }

                     else

                     {

                            if( fileList[i].getName().endsWith(".java"))

                            {

                                   set.add( fileList[i]);

                            }

                     }

              }

       }

      

       private void printPath()throws Exception

       {

              Iterator<File> i=set.iterator();

              File f;

              while( i.hasNext())

              {

                     f=i.next();

                     fw.write(f.getAbsolutePath());

                     fw.newLine();

              }

       }

      

      

}

 

class Demo

{

       public static void main(String args[]) throws Exception

       {

      

              ListFile listFile=new ListFile("D://day22");

              listFile.startList();

       }

      

      

}

 

 

/*====第七题====================================

计算字符串中子串出现的位置,

例:子串"kk"在字符串abkkcdkkabkkefkk中出现的次数

思路:

1,既然是操作字符串就要先想到String类中是否提供相关方法.

2,可以先通过indexOf索引子串第一次出现的位置.第二次在索引的时候,就应该从第一次出现的位置+子串的长度后在从剩下的字符串中查找还有没有该子串.那么需要定义一个变量将剩下的字符串记录一下.

3,该过程既然重复.就需要循环来做.循环条件即为:indexOf索引返回-1.停止循环.

*/

 

 

import java.util.*;

 

class Demo

{

       public static void main(String args[] )

       {

              String s="abkkcdkkabkkefkk";

              String findStr="kk";

              int pos=-findStr.length();

              TreeSet<Integer> set=new TreeSet<Integer>();

                           

              do

              {

                     pos=s.indexOf( findStr,pos+findStr.length() );

                     if(pos!=-1)

                     {

                            set.add(pos);

                     }

              }while(pos!=-1);

             

              Iterator<Integer> i=set.iterator();

              while( i.hasNext())

              {

                     System.out.println(i.next());

              }

       }

}

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newjueqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值