• Java 基础笔记&代码 流


       1    2    3    4    5    6  
       7 
       8 一.java中常用工具类 文件 流 
       9 //object类他 所有类父类
      10 /**
      11  *   1.equals:判断相等。如果子类要进行重写 该方法要重写
      12  *   2. finalize():当垃圾回收器确定没有阻塞 给更多垃圾是则调用该方法
      13  *   3.wait:可以将将线程阻塞 并将锁释放
      14  *   4.notify.notifyall:将wait 阻塞对象解除阻塞的状态
      15  * 
      16  * system类:
      17  *   err:标准错误输出流
      18  *   out:标注输出流
      19  *   in:标准输入流
      20  *   exit(n):终止虚拟机。n为0 则但单纯退出虚拟机
      21  *   实际上等偶同与Runtime.getRuntime.exit(0);
      22  * GC:
      23  *   通知垃圾回收器回收垃圾 并不代表表马上执行
      24  *   最终会调用finalize方法
      25  *   arraycopy(object src,int srcPos ,object dest,int destpos,int length):
      26  *   用来复制数组的
      27  * 参数解析
      28  *   1.src-----源数组
      29  *   srcpos---原数组的起始位置
      30  *   dest---目标数组
      31  *   destpos-----目标数组起始位置
      32  * currentTimeMillis:返回以毫秒为单位当前时间17071天
      33  * String:类
      34  *   String 创建对象
      35  *   String s="ee";池中创建对象
      36  *   使用String的构造器创建的时候会在堆中创建
      37  *   String的本质:就是char的数组
      38  *   String类:的长度确定不能更改
      39  *   String对象一旦请确定不可更改
      40  *   String类的常用方法:
      41  *   (1).charAt(index):返回指定索引出的char
      42  *   (2).concat(String str):相当于+连接符
      43  *   (3).endswith(String suffix):判断 该字符串是否已xxx结尾@author Administrator
      44  *   (4).equals(Object obj):比较两个字符串是否相等
      45  *   (5).equalsIgnorecase:忽略大小写比较
      46  *   (6).indexof(ch):返回指定字符在该字符串中第一次出现的位置
      47  *   (7).indexof(ch ,int fromIndex):返回指定字符在该字符串中第一次出现的位置 并从哪个索引开始
      48  *   (8).length():长度  集合size
      49  *   (9).isEmpty():如果length为0 则返回true
      50  *   (10).lastIndexof(ch):制定字符串最后一次出现的位置
      51  *   (11).replace(char old,char new ):替换并返回
      52  *   (12).split(String  reg):按照指定的规则截取并返回一个字符创数组
      53  *   (13).startswith(String ch):判断 开始
      54  *   (14).substring(int index):从某个位置开始截取到结尾
      55  *   (15).substring(int begin,int end):从某未开始截取到(某位 之前)
      56  *   (16).toCharArray():把String 转设为char 型数组
      57  *   (17).getBytes:返回字节数
      58  *   (18).toLowersCase()
      59  *   (19).toUpperCase()
      60  *   (20).trim:返回字符串副本 去除首尾空格 
      61  * (4)缓冲字符
      62  *  Stringbuffer和StringBuilder(效率高):安全问题
      63  *  为什么要使用?
      64  *  (1)可以不创建多个对象 直接改变 对象内容
      65  *    append():想缓冲区增加字符
      66  *    insert(int a.String b):将指定在字符插入到制定的位置
      67  *    delete(int start , int  end):删除制定位置上的字符串
      68  *   (2)Stringbuffer和StringBuilder的区别
      69  *   (3)Stringbuffer    出现的较早 效率低 线程安全     重量级
      70  *   (4)StringBuilder   出现的较晚 效率高 线程不安全  轻量级
      71  *   (5)Data时间类
      72  *    获取当前时间Date d=new date(); 
      73  *    (6).处理date日期格式使用simpleDateFormat() *    
      74  * SimpleDateFormat sdf=new simpleDateFormat("yy  mm  dd")
      75  * String myday =sdf.format(d);
      76  * system.out.print(myday);
      77  *  Timestamp:时间戳 正常时间格式 并精确返回到毫秒
      78  *  (7)日历类
      79  *  calendar c=new calendar.getInstance();
      80  *  system.out.print(c.getTime);
      81  * 
      82  * eg:
      83  *  calendar c=new calendar.getInstance();
      84  *  system.out.print(c.getTime);
      85  *  单例模式:
      86  *  public class Single {
      87     
      88     //(1).提供私有构造器
      89         private Single(){}
      90     //(2)提供私有静态的对象实例
      91         private static Single instance=new Single();
      92         public static Single getInstance(){
      93             return instance;
      94             
      95         }
      96         }
      97 
      98  * (7)Math类:
      99  * 常用方法
     100  * (7.1)PI:属性,返回一个接近圆周率的数值
     101  * (7.2)abs(double a):返回double值得绝对值
     102  * (7.3)cbrt(double a):返回的是double的开立方根
     103  * (7.4)floor(double):返回值  最接近 最大的前 取整
     104  * (7.5)max(double a,double b):两个数取最大的
     105  * (7.6)min(double a,double b):两个数取最小的
     106  * (7.7)pow(double  a,double b):返回第一个参数的 n次幂  ( a的b次幂)
     107  * (7.8)sqrt(double a):开的是“正”平方根
     108  * (7.9)round(double a):四舍五入
     109  * (7.10)random():得到一个随机数
     110  * system.out.print(Math.random()*100);100以内随机数
     111  * eg:Random ran=new Random();
     112  * int  b=ran.nextInt(10);
     113  * sysout(b);  
     114  */
     115 IO流:
     116 数据的输入和输出,java中把这种形式抽象表述为“流”stream
     117 I/O流:
     118 Input:输入
     119 Output:输出
     120 流的分类
     121 1.    方向分:
     122 输入流:读取数据(只读)
     123 输出流:只写 输出
     124 2.    处理数据分:
     125   字节流:每次读写的时候一字节为单位
     126 字符流:每次读写的时候一字符为单位
     127 3.    按照功能分:
     128   低级流:(节点流)直接从硬盘络商都读取数据
     129   高级流:(处理流)直接在低级流上套一个高级流
     130 
     131 
     132 
     133 InputStream:
     134 read():一次读取一个字节 如果读到文档末尾则返回-1 
     135 使用:
     136 (1).创建流
     137 (2).操作
     138 (3).关闭
     139 OutputStream:
     140   Write():y一次只能写 一个字节
     141 File:
     142 高级流:只需要低级流上套一层流
     143 缓冲流:BufferedInPutStream
     144 BufferedOutPutStream
     145 Reader和Writer:文本文档
     146 序列化
     147 就是把对象的信息保存到本地文件
     148 反序列化
     149 就是把本地文件中存储对象的信息变回对象
     150 高级流
     151 ObjectInputStream
     152 ObjectOutputStream
     153 (1)序列化必须实现 serializable接口(implements)
     154 (2)版本号要一致
     155 二.文件
     156 //  创建文件对象 不可重复
     157 //        File file = new File("D:/hello.txt");
     158 //        
     159 //        try {
     160 //            boolean issuccess=file.createNewFile();
     161 //             System.out.println(issuccess);
     162 //        } catch (IOException e) {
     163 //            // TODO Auto-generated catch block
     164 //            e.printStackTrace();
     165 //        }
     166 // // 创建目录 不可重复 //单级目录
     167 //        
     168 //        
     169 //        File file1=new File("D:/我的目");
     170 //        boolean isSuccess=file1.mkdir();
     171 //        System.out.println(isSuccess);
     172 // // 创建目录 不可重复 //多级目录    
     173 //        
     174 //        
     175 //        File file2=new File("D:/我的目录1/目录1/目录2");
     176 //        boolean isSuccess2=file2.mkdirs();
     177 //        System.out.println(isSuccess2);
     178 // //删除文件  回收站不可找回
     179 //        
     180 //        
     181 //        boolean isSussess=file.delete();
     182 //        System.out.println(isSussess);
     183 //  删除文件夹  回收站不可找回
     184     //绝对路径
     185 //        File file = new File("D:/我的目录");
     186 //        //boolean isSuc=file.mkdir();
     187 //    //非空不能删除
     188 //        boolean isDelte=file.delete();
     189 //        //System.out.println(isSuc);
     190 //        System.out.println(isDelte);
     191     //使用相对路径创建文件 不指定盘符  相对路经就是工程文件夹
     192 //        File file = new File("a.txt");
     193 //        boolean isSuc=file.createNewFile();
     194 //        System.out.println(isSuc);
     195 //        file.delete();
     196 //    //文件夹只能一级一级删除
     197 //        File file1 = new File("aa/bb");
     198 //        boolean isSuc1=file1.mkdirs();
     199 //        System.out.println(isSuc1);
     200 //        file1.delete();
     201     //package下创建文件
     202         File file1 = new File("src3/zz/liwanxu.mp3");
     203         file1.createNewFile();
     204         file1.delete();
     205     }
     206 二.字符流
     207 1.向一个文件写100个HELLOWORD
     208 import java.io.File;
     209 import java.io.FileWriter;
     210 import java.io.IOException;
     211 
     212 
     213 public class iodemo1 {
     214 
     215     /**
     216      * @param args
     217      */
     218     
     219     public static void main(String[] args) {
     220         writeFile1();
     221         // TODO Auto-generated method stubf
     222     }    
     223     public static void writeFile1() {
     224         // TODO Auto-generated method stubf
     225         
     226          FileWriter fw=null;
     227         try {
     228             //创建输出流的对象
     229             fw=new FileWriter("b.txt");
     230             for(int i=0;i<100;i++){
     231                   //把内容 写到文件
     232                 fw.write("hellowrite");
     233                 if(i%10==0){
     234                     //字符流的特点 清空缓冲区 把内容写到文件中
     235                     fw.flush();
     236                 }
     237             }
     238                //字符流的特点 清空缓冲区 把内容写到文件中
     239             fw.flush();
     240             
     241         } catch (IOException e) {
     242             // TODO Auto-generated catch block
     243             e.printStackTrace();
     244         }finally{
     245             
     246             
     247             if(fw !=null){
     248             
     249                 try {
     250                     //close关闭输出流之前清空缓冲区
     251                     fw.close();
     252                 } catch (IOException e) {
     253                     // TODO Auto-generated catch block
     254                     e.printStackTrace();
     255                 }
     256             }
     257         }
     258         
     259 
     260     }
     261 
     262 }
     263  
     264  
     265 2.追加
     266 import java.io.File;
     267 import java.io.FileWriter;
     268 import java.io.IOException;
     269 
     270 
     271 public class iodemo1 {
     272 
     273     /**
     274      * @param args
     275      */
     276     
     277     public static void main(String[] args) {
     278         writeFile1();
     279         // TODO Auto-generated method stubf
     280     }    
     281     public static void writeFile1() {
     282         // TODO Auto-generated method stubf
     283         
     284          FileWriter fw=null;
     285         try {
     286             //创建输出流的对象
     287             //fw=new FileWriter("b.txt",true);
     288             fw=new FileWriter(new File("b.txt"),true);
     289             for(int i=0;i<10;i++){
     290                   //把内容 写到文件
     291                 fw.write("我i爱你");
     292                 if(i%10==0){
     293                     //字符流的特点 清空缓冲区 把内容写到文件中
     294                     fw.flush();
     295                 }
     296             }
     297                //字符流的特点 清空缓冲区 把内容写到文件中
     298             fw.flush();
     299             
     300         } catch (IOException e) {
     301             // TODO Auto-generated catch block
     302             e.printStackTrace();
     303         }finally{
     304             
     305             
     306             if(fw !=null){
     307             
     308                 try {
     309                     //close关闭输出流之前清空缓冲区
     310                     fw.close();
     311                 } catch (IOException e) {
     312                     // TODO Auto-generated catch block
     313                     e.printStackTrace();
     314                 }
     315             }
     316         }
     317         
     318 
     319     }
     320 
     321 }
     322  
     323 3.输出换行
     324   把文本写入文件中 
    代表换行
     325   Window:
    ;
    在前时eclipse中隔行空格 建议使用 兼容记事本
     326   Linux:
    ;
     327 Mc:
    ;
     328 
     329 
     330 import java.io.File;
     331 import java.io.FileWriter;
     332 import java.io.IOException;
     333 
     334 
     335 public class iodemo2 {
     336 
     337     /**
     338      * @param args
     339      */
     340     
     341     public static void main(String[] args) {
     342         writeFile1();
     343         // TODO Auto-generated method stubf
     344     }    
     345     public static void writeFile1() {
     346         // TODO Auto-generated method stubf
     347         
     348          FileWriter fw=null;
     349         try {
     350             //创建输出流的对象
     351             fw=new FileWriter("b.txt");
     352            
     353             for(int i=0;i<10;i++){
     354                   //把内容 写到文件
     355                 fw.write("我i爱你"+i+"
    
    ");
     356                 if(i%10==0){
     357                     //字符流的特点 清空缓冲区 把内容写到文件中
     358                     fw.flush();
     359                 }
     360             }
     361                //字符流的特点 清空缓冲区 把内容写到文件中
     362             fw.flush();
     363             
     364         } catch (IOException e) {
     365             // TODO Auto-generated catch block
     366             e.printStackTrace();
     367         }finally{
     368             
     369             
     370             if(fw !=null){
     371             
     372                 try {
     373                     //close关闭输出流之前清空缓冲区
     374                     fw.close();
     375                 } catch (IOException e) {
     376                     // TODO Auto-generated catch block
     377                     e.printStackTrace();
     378                 }
     379             }
     380         }
     381         
     382 
     383     }
     384 
     385 }
     386  
     387 4.出入流
     388 FileReader的爷爷是Reader
     389 需求:
     390 读取文件Hello word打印到控制台
     391 分析:
     392 1.    创建出入刘对象FileReader
     393 2.    读取数据
     394 3.    关系输入流  注意:需自己新建一个helloword.txt
     395 package filereader;
     396 
     397 import java.io.File;
     398 import java.io.FileNotFoundException;
     399 import java.io.FileReader;
     400 import java.io.IOException;
     401 
     402 public class Filereader {
     403     public static void main(String[] args) {
     404         readerFile();
     405         
     406     }
     407     public static void readerFile(){
     408         FileReader fr=null; 
     409         try {
     410             //创建文件都去对象 两种方法
     411             //fr=new FileReader("helloWord.txt");
     412             fr=new FileReader(new File("helloWord.txt") );
     413             try {
     414             //读取单个字符 返回的是字符的Ascll码 读取一个字符 之后在读取一个字符
     415                 /*int n=fr.read();
     416                 System.out.println((char)n);
     417                 
     418                 int n1=fr.read();
     419                 System.out.println((char)n1);*/
     420             //若果读取完毕,最后没有字符是会返回-1
     421             
     422               int num=0;
     423             //通过循环读取字符  判断跳出循环的标志是num=-1;
     424               while((num=fr.read())  !=-1){
     425                 System.out.println((char)num);
     426                     
     427                 }
     428             } catch (IOException e) {
     429                 // TODO Auto-generated catch block
     430                 e.printStackTrace();
     431             }
     432         } catch (FileNotFoundException e) {
     433             // TODO Auto-generated catch block
     434             e.printStackTrace();
     435         }
     436         finally{
     437             
     438             if(fr!=null){
     439                 try {
     440                     fr.close();
     441                 } catch (IOException e) {
     442                     // TODO Auto-generated catch block
     443                     e.printStackTrace();
     444                 }
     445                 
     446                 
     447             }
     448         }
     449     }
     450 
     451 }
     452 
     453 5.读取数据以字符串数组形式读取(相对路径)
     454 package filereader;
     455 
     456 import java.io.File;
     457 import java.io.FileNotFoundException;
     458 import java.io.FileReader;
     459 import java.io.IOException;
     460 
     461 public class Filereader {
     462     public static void main(String[] args) {
     463         readerFile();
     464         
     465     }
     466     public static void readerFile(){
     467         FileReader fr=null; 
     468         try {
     469             //创建文件都去对象 两种方法
     470             //fr=new FileReader("helloWord.txt");
     471             fr=new FileReader("helloWord.txt" );
     472             try {
     473                 //创建一个字符数组
     474             
     475                 
     476                 
     477 //                char[] cha=new char[30];
     478 //                int sum=fr.read(cha);
     479 //                String str=new String(cha,0,sum);
     480 //                System.out.println((char)sum);
     481 //                System.out.println(str);
     482                 char[] cha1=new char[1024];
     483                 int num1=-1;
     484                 
     485                      while((num1=fr.read(cha1))!=-1){
     486                          System.out.println(new String( cha1,0,num1));
     487                          
     488                          
     489                          
     490                          
     491                      }
     492             } catch (IOException e) {
     493                 // TODO Auto-generated catch block
     494                 e.printStackTrace();
     495             }
     496         } catch (FileNotFoundException e) {
     497             // TODO Auto-generated catc h block
     498             e.printStackTrace();
     499         }
     500         finally{
     501             
     502             if(fr!=null){
     503                 try {
     504                     fr.close();
     505                 } catch (IOException e) {
     506                     // TODO Auto-generated catch block
     507                     e.printStackTrace();
     508                 }
     509                 
     510                 
     511             }
     512         }
     513     }
     514 
     515 }
     516 
     517 5(1)读取数据以字符串数组形式读取(绝对路径)
     518 package filereader;
     519 
     520 import java.io.File;
     521 import java.io.FileNotFoundException;
     522 import java.io.FileReader;
     523 import java.io.IOException;
     524 
     525 public class Filereader1 {
     526     public static void main(String[] args) {
     527         readerFile();
     528         
     529     }
     530     public static void readerFile(){
     531         FileReader fr=null; 
     532         try {
     533             //创建文件都去对象 两种方法
     534             //fr=new FileReader("helloWord.txt");
     535             fr=new FileReader("D://helloWord.txt" );
     536             try {
     537                 //创建一个字符数组
     538             
     539                 
     540                 
     541 //                char[] cha=new char[30];
     542 //                int sum=fr.read(cha);
     543 //                String str=new String(cha,0,sum);
     544 //                System.out.println((char)sum);
     545 //                System.out.println(str);
     546                 char[] cha1=new char[1024];
     547                 int num1=-1;      
     548                 
     549                      while((num1=fr.read(cha1))!=-1){
     550                          System.out.println(new String(cha1,0,num1));
     551                          
     552                          
     553                          
     554                          
     555                      }
     556             } catch (IOException e) {
     557                 // TODO Auto-generated catch block
     558                 e.printStackTrace();
     559             }
     560         } catch (FileNotFoundException e) {
     561             // TODO Auto-generated catc h block
     562             e.printStackTrace();
     563         }
     564         finally{
     565             
     566             if(fr!=null){
     567                 try {
     568                     fr.close();
     569                 } catch (IOException e) {
     570                     // TODO Auto-generated catch block
     571                     e.printStackTrace();
     572                 }
     573                 
     574                 
     575             }
     576         }
     577     }
     578 
     579 }
     580 
     581 
     582 6.使用字符流来做文件的拷贝
     583   范例:把一个java文件拷贝到项目根目录
     584 分析:1.创建输入流对象
     585 2.创建输出流对象
     586 3.把输入的数据写入输出流中
     587 4.关闭资源
     588 方法一:方法是字节读取(慢)
     589 package filereader;
     590 
     591 import java.io.File;
     592 import java.io.FileNotFoundException;
     593 import java.io.FileReader;
     594 import java.io.FileWriter;
     595 import java.io.IOException;
     596 import java.io.Reader;
     597 import java.io.Writer;
     598 
     599 public class CopyFile {
     600     public static void main(String[] args) {
     601         copy1();
     602         System.out.println("done");
     603     }
     604     
     605     public static  void  copy1(){
     606         Reader  reader =null;
     607         Writer writer =null;
     608         try {
     609         //创建文件读取对象
     610              reader =new FileReader ("src3/filereader/Filereader.java");
     611         
     612         //创建写文件的对象
     613              writer =new FileWriter ("Filereader.java");
     614 
     615              int num=-1;
     616              //读取文件
     617              //int num=reader.read();
     618              //当未读取完文件时,写入文件
     619 
     620              while((num=reader.read())!=-1){
     621                  writer.write(num);
     622                  
     623              }
     624          
     625         } catch (FileNotFoundException e) {
     626             // TODO Auto-generated catch block
     627             e.printStackTrace();
     628         }catch (IOException e) {
     629             // TODO Auto-generated catch block
     630             e.printStackTrace();
     631         }
     632         finally{
     633             //释放资源 
     634                 try {
     635                     if(writer !=null)
     636                         writer.close();
     637                     if(reader !=null)
     638                         reader.close();
     639                 } catch (IOException e) {
     640                     // TODO Auto-generated catch block
     641                     e.printStackTrace();
     642                 }
     643             
     644             
     645         }
     646     }
     647 }
     648 
     649 
     650 方法二:数组读取(快)
     651 package filereader;
     652 
     653 import java.io.File;
     654 import java.io.FileNotFoundException;
     655 import java.io.FileReader;
     656 import java.io.FileWriter;
     657 import java.io.IOException;
     658 import java.io.Reader;
     659 import java.io.Writer;
     660 
     661 public class CopyFile {
     662     public static void main(String[] args) {
     663         copy1();
     664         System.out.println("done");
     665     }
     666     
     667     public static  void  copy1(){
     668         Reader  reader =null;
     669         Writer writer =null;
     670         try {
     671             //创建文件读取对象
     672     Reader=newFileReader("src3/filereader/Filereader.java");
     673         
     674             //创建写文件的对象
     675              writer =new FileWriter ("Filereader.java");
     676              //定义读取长度的对象
     677              int len=-1;
     678              //定义存储读取内容字符的数组
     679              char[] chs=new char[1024];
     680              //读取文件
     681              //int num=reader.read();
     682              //当len!=-1,就一直读取 
     683              while((len=reader.read(chs))!=-1){
     684                  //把读取的文件写到目标文件中
     685                  writer.write(chs, 0, len);
     686                  
     687              }
     688          
     689         } catch (FileNotFoundException e) {
     690             // TODO Auto-generated catch block
     691             e.printStackTrace();
     692         }catch (IOException e) {
     693             // TODO Auto-generated catch block
     694             e.printStackTrace();
     695         }
     696         finally{
     697             //释放资源 
     698                 try {
     699                     if(writer !=null)
     700                         writer.close();
     701                     if(reader !=null)
     702                         reader.close();
     703                 } catch (IOException e) {
     704                     // TODO Auto-generated catch block
     705                     e.printStackTrace();
     706                 }
     707             
     708             
     709         }
     710     }
     711 }
     712 
     713 
     714 高效缓冲区输入输出流
     715 BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
     716 构造方法摘要
     717 BufferedReader(Reader in) 
     718           创建一个使用默认大小输入缓冲区的缓冲字符输入流。    
     719 范例一:使用高效缓冲区来读取文件中的内容(建议使用数组读取,字符不够高效)
     720 package buffer;
     721 
     722 import java.io.BufferedReader;
     723 
     724 import java.io.FileReader;
     725 
     726 import java.io.IOException;
     727 
     728 public class bufferwriterdemo {
     729     public static void main(String[] args) {
     730         read();
     731         System.out.println("done");
     732         
     733     }
     734     //使用高效缓冲区向d.txt中写入“java太好学了,真简单”
     735     public static void read(){
     736         FileReader fr=null;
     737         BufferedReader br=null;
     738         try {
     739              fr=new FileReader("d.txt");
     740              //创建高效缓冲区的流对象
     741              br=new BufferedReader(fr);
     742              //输出数据
     743             int len=-1;
     744             char[] chs=new char[1024]; 
     745             
     746             while((len=br.read(chs))!=-1){
     747                 
     748                 System.out.println((new String(chs,0,len)));
     749             }
     750         } catch (IOException e) {
     751             // TODO Auto-generated catch block
     752             e.printStackTrace();
     753         }finally{
     754             if(br!=null)
     755             try {
     756                 //关闭缓冲区会自动关闭FileWriter
     757                 br.close();
     758             } catch (IOException e) {
     759                 // TODO Auto-generated catch block
     760                 e.printStackTrace();
     761             }
     762         }
     763         
     764     }
     765 
     766 }
     767 
     768 
     769 
     770 BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
     771 构造方法摘要
     772 BufferedWriter(Writer out) 
     773           创建一个使用默认大小输出缓冲区的缓冲字符输出流。    
     774 
     775 范例二:使用高效缓冲区来向文件中写入一句话
     776 package buffer;
     777 
     778 import java.io.BufferedWriter;
     779 import java.io.FileWriter;
     780 import java.io.IOException;
     781 
     782 public class bufferwriterdemo {
     783     public static void main(String[] args) {
     784         writer();
     785         System.out.println("done");
     786         
     787     }
     788     //使用高效缓冲区向d.txt中写入“java太好学了,真简单”
     789     public static void writer(){
     790         FileWriter fe=null;
     791         BufferedWriter bw=null;
     792         try {
     793              fe=new FileWriter("d.txt");
     794              //创建高效缓冲区的流对象
     795              bw=new BufferedWriter(fe);
     796              //输出数据
     797              bw.write("java太好学了,真简单");
     798              bw.flush();
     799         } catch (IOException e) {
     800             // TODO Auto-generated catch block
     801             e.printStackTrace();
     802         }finally{
     803             if(bw!=null)
     804             try {
     805                 //关闭缓冲区会自动关闭FileWriter
     806                 bw.close();
     807             } catch (IOException e) {
     808                 // TODO Auto-generated catch block
     809                 e.printStackTrace();
     810             }
     811         }
     812         
     813     }
     814 
     815 }
     816 
     817 换行的两种方法:
     818 (1).
       (2).bw.newLine
     819 import java.io.BufferedWriter;
     820 import java.io.File;
     821 import java.io.FileWriter;
     822 import java.io.IOException;
     823 
     824 
     825 public class iodemo {
     826 
     827     /**
     828      * @param args
     829      */
     830     
     831     public static void main(String[] args) {
     832         writeFile1();
     833         // TODO Auto-generated method stubf
     834         
     835     }
     836     public static void writeFile1() {
     837         // TODO Auto-generated method stubf
     838         
     839          FileWriter fw=null;
     840          BufferedWriter bw=null;
     841         try {
     842             //创建输出流的对象
     843             fw=new FileWriter("b.txt");
     844             bw=new BufferedWriter(fw);
     845             //把内容写到文件
     846             for(int i=0; i<10; i++){
     847                 bw.write("hello write.");
     848                 //字符流的特点 清空缓冲区 把内容写到文件中
     849                 
     850                 //相当于
    
     851                 bw.newLine();
     852                 
     853             }
     854             bw.flush();
     855             
     856         } catch (IOException e) {
     857             // TODO Auto-generated catch block
     858             e.printStackTrace();
     859         }finally{
     860             
     861             
     862             if(fw !=null){
     863             
     864                 try {
     865                     //close关闭输出流是清空缓冲区
     866                     fw.close();
     867                 } catch (IOException e) {
     868                     // TODO Auto-generated catch block
     869                     e.printStackTrace();
     870                 }
     871             }
     872         }
     873         
     874 
     875     }
     876 
     877 }
     878  
     879 读取一行数据readline
     880 package filereader;
     881 
     882 import java.io.BufferedReader;
     883 import java.io.File;
     884 import java.io.FileNotFoundException;
     885 import java.io.FileReader;
     886 import java.io.IOException;
     887 
     888 public class Filereader1 {
     889     public static void main(String[] args) {
     890         readerFile();
     891         
     892     }
     893     public static void readerFile(){
     894         FileReader fr=null; 
     895         BufferedReader br=null;
     896         try {
     897             //创建文件都去对象 两种方法
     898             fr=new FileReader("helloWord.txt");
     899              br=new BufferedReader(fr);
     900             //使用高效输入流可以读取一行数据
     901             String line=null;
     902             while((line=br.readLine())!=null){
     903                 System.out.println(line);
     904                 
     905             }
     906             
     907         } catch (IOException e) {
     908                 // TODO Auto-generated catch block
     909                 e.printStackTrace();
     910             }
     911         
     912         finally{
     913             
     914             if(fr!=null){
     915                 try {
     916                     fr.close();
     917                 } catch (IOException e) {
     918                     // TODO Auto-generated catch block
     919                     e.printStackTrace();
     920                 }
     921                 
     922                 
     923             }
     924         }
     925     }
     926 
     927 }
     928 
     929 使用高效缓冲流进行复制
     930 
     931 package filereader;
     932 
     933 import java.io.BufferedReader;
     934 import java.io.BufferedWriter;
     935 import java.io.File;
     936 import java.io.FileNotFoundException;
     937 import java.io.FileReader;
     938 import java.io.FileWriter;
     939 import java.io.IOException;
     940 import java.io.Reader;
     941 import java.io.Writer;
     942 
     943 public class CopyFile {
     944     public static void main(String[] args) {
     945         copy1();
     946         System.out.println("done");
     947     }
     948     
     949     public static  void  copy1(){
     950         Reader  reader =null;
     951         BufferedReader br=null;
     952 
     953         Writer writer =null;
     954         BufferedWriter bw=null;
     955         try {
     956             
     957              reader =new FileReader ("src3/filereader/Filereader.java");
     958              br=new BufferedReader(reader);
     959              
     960              
     961              writer =new FileWriter ("Filereader.java");
     962              bw=new BufferedWriter(writer);
     963              
     964              
     965              String line=null;
     966             
     967              while((line=br.readLine())!=null){
     968                  bw.write(line);
     969                  bw.newLine();
     970                  
     971              }
     972              bw.flush();
     973          
     974         } catch (FileNotFoundException e) {
     975             // TODO Auto-generated catch block
     976             e.printStackTrace();
     977         }catch (IOException e) {
     978             // TODO Auto-generated catch block
     979             e.printStackTrace();
     980         }
     981         finally{
     982             //释放资源 
     983                 try {
     984                     if(writer !=null)
     985                         writer.close();
     986                     if(reader !=null)
     987                         reader.close();
     988                 } catch (IOException e) {
     989                     // TODO Auto-generated catch block
     990                     e.printStackTrace();
     991                 }
     992             
     993             
     994         }
     995     }
     996 }
     997 
     998 
     999 加强版(绝对路径,无覆盖)
    1000 package filereader;
    1001 
    1002 import java.io.BufferedReader;
    1003 import java.io.BufferedWriter;
    1004 import java.io.File;
    1005 import java.io.FileNotFoundException;
    1006 import java.io.FileReader;
    1007 import java.io.FileWriter;
    1008 import java.io.IOException;
    1009 import java.io.Reader;
    1010 import java.io.Writer;
    1011 
    1012 public class CopyFile {
    1013     public static void main(String[] args) {
    1014         copy1();
    1015         System.out.println("done");
    1016     }
    1017     
    1018     public static  void  copy1(){
    1019         Reader  reader =null;
    1020         BufferedReader br=null;
    1021 
    1022         Writer writer =null;
    1023         BufferedWriter bw=null;
    1024         try {
    1025             
    1026              reader =new FileReader ("D:/helloWord.txt");
    1027              br=new BufferedReader(reader);
    1028              
    1029              
    1030              writer =new FileWriter ("D:/新建文本文档.txt",true);
    1031              bw=new BufferedWriter(writer);
    1032              
    1033              
    1034              String line=null;
    1035             
    1036              while((line=br.readLine())!=null){
    1037                  bw.write(line);
    1038                  bw.newLine();
    1039                  
    1040              }
    1041              bw.flush();
    1042          
    1043         } catch (FileNotFoundException e) {
    1044             // TODO Auto-generated catch block
    1045             e.printStackTrace();
    1046         }catch (IOException e) {
    1047             // TODO Auto-generated catch block
    1048             e.printStackTrace();
    1049         }
    1050         finally{
    1051             //释放资源 
    1052                 try {
    1053                     if(writer !=null)
    1054                         writer.close();
    1055                     if(reader !=null)
    1056                         reader.close();
    1057                 } catch (IOException e) {
    1058                     // TODO Auto-generated catch block
    1059                     e.printStackTrace();
    1060                 }
    1061             
    1062             
    1063         }
    1064     }
    1065 }
    1066 
    1067 
    1068 
    1069 
    1070 ------------------------------------------------------------------------------------------------------------
    1071 以上都是字符流文本复制
    1072 
    1073 三.字节流
    1074 字节输入流:InputStream:常用子类FileInputStream
    1075 字节输出流:OutputStreram:常用子类FileOutputStream
    1076 OutputStream:
    1077 构造方法摘要
    1078 FileOutputStream(File file) 
    1079           创建一个向指定 File 对象表示的文件中写入数据的文件输出流。    
    1080 FileOutputStream(File file, boolean append) 
    1081           创建一个向指定 File 对象表示的文件中写入数据的文件输出流。    
    1082 FileOutputStream(String name) 
    1083           创建一个向具有指定名称的文件中写入数据的输出文件流。    
    1084 FileOutputStream(String name, boolean append) 
    1085           创建一个向具有指定 name 的文件中写入数据的输出文件流。    
    1086 范例:使用在字节流项文件中写入helloword
    1087 package zijieliu;
    1088 
    1089 import java.io.FileNotFoundException;
    1090 import java.io.FileOutputStream;
    1091 import java.io.IOException;
    1092 
    1093 
    1094 public class OutputStream {
    1095     public static void main(String[] args) {
    1096         writeFile();
    1097     }
    1098     
    1099     
    1100     public static void writeFile(){
    1101         //使用字节流输出对象
    1102         FileOutputStream out=null;
    1103          try {
    1104              out=new FileOutputStream("a.txt");
    1105              String str="helloword";
    1106             byte[] bs=str.getBytes();
    1107             for(byte b:bs){
    1108                 //单个字节
    1109                 out.write(b);
    1110             
    1111             }
    1112         } catch (FileNotFoundException e) {
    1113             
    1114             e.printStackTrace();
    1115         } catch (IOException e) {
    1116             
    1117             e.printStackTrace();
    1118         }finally{
    1119             
    1120             if(out!=null){
    1121                 try {
    1122                     out.close();
    1123                 } catch (IOException e) {
    1124                     // TODO Auto-generated catch block
    1125                     e.printStackTrace();
    1126                 }
    1127             }
    1128         }
    1129         
    1130     }
    1131 
    1132 }
    1133 
    1134 字节流输出流
    1135 package zijieliu;
    1136 
    1137 import java.io.File;
    1138 import java.io.FileNotFoundException;
    1139 import java.io.FileOutputStream;
    1140 import java.io.IOException;
    1141 
    1142 
    1143 public class OutputStream {
    1144     public static void main(String[] args) {
    1145         writeFile();
    1146     }
    1147     
    1148     
    1149     public static void writeFile(){
    1150         //使用字节流输出对象
    1151         FileOutputStream out=null;
    1152          try {
    1153              //追加效果
    1154              out=new FileOutputStream("a.txt",true);
    1155              //效果一致
    1156              //out=new FileOutputStream(new File("a.txt"));
    1157             //out=new FileOutputStream(new File("a.txt"),true);
    1158              String str="helloword";
    1159             byte[] bs=str.getBytes();
    1160                //
    1161                 //out.write(bs,0,5);
    1162                 out.write(bs);
    1163             
    1164             
    1165         } catch (FileNotFoundException e) {
    1166             
    1167             e.printStackTrace();
    1168         } catch (IOException e) {
    1169             
    1170             e.printStackTrace();
    1171         }finally{
    1172             
    1173             if(out!=null){
    1174                 try {
    1175                     out.close();
    1176                 } catch (IOException e) {
    1177                     // TODO Auto-generated catch block
    1178                     e.printStackTrace();
    1179                 }
    1180             }
    1181         }
    1182         
    1183     }
    1184 
    1185 }
    1186 package zijieliu;
    1187 
    1188 import java.io.File;
    1189 import java.io.FileInputStream;
    1190 import java.io.FileNotFoundException;
    1191 import java.io.FileOutputStream;
    1192 import java.io.IOException;
    1193 
    1194 
    1195 public class OutputStream {
    1196     public static void main(String[] args) {
    1197         readFile();
    1198     }
    1199     
    1200     
    1201     public static void readFile(){
    1202         //使用字节流输出对象
    1203         FileInputStream in=null;
    1204          try {
    1205              //追加效果
    1206              in=new FileInputStream("a.txt");
    1207              byte[] bs=new byte[1024];
    1208              //读取文件  存储数组  从字节输入流去三个字节 从第一个索引位置开始
    1209             int len= in.read(bs, 1, 3);
    1210 //            for(byte b:bs){
    1211 //                
    1212 //                System.out.print(b);
    1213 //            }
    1214             System.out.println(new String(bs,1,len));
    1215             
    1216             
    1217             
    1218         } catch (FileNotFoundException e) {
    1219             
    1220             e.printStackTrace();
    1221         } catch (IOException e) {
    1222             
    1223             e.printStackTrace();
    1224         }finally{
    1225             
    1226             if(in!=null){
    1227                 try {
    1228                     in.close();
    1229                 } catch (IOException e) {
    1230                     // TODO Auto-generated catch block
    1231                     e.printStackTrace();
    1232                 }
    1233             }
    1234         }
    1235         
    1236     }
    1237 
    1238 }
    1239 
    1240 范例2:使用字节流来拷贝文件
    1241 package zijieliu;
    1242 
    1243 import java.io.FileInputStream;
    1244 import java.io.FileNotFoundException;
    1245 import java.io.FileOutputStream;
    1246 import java.io.IOException;
    1247 import java.io.InputStream;
    1248 
    1249 public class CopyFileDemo {
    1250 
    1251     /**
    1252      * @param args
    1253      */
    1254     public static void main(String[] args) {
    1255         // TODO Auto-generated method stub
    1256         copyFile();
    1257 
    1258     }
    1259     /*
    1260      * 
    1261      * 1.创建输入字节流的对象,输出字节流对象
    1262      * 2.读取数据 并且写入数据
    1263      * 3.关闭资源
    1264      */
    1265     public static void copyFile(){
    1266         InputStream in=null;
    1267         FileOutputStream out=null;
    1268         try {
    1269             
    1270             in=new FileInputStream("src/zijieliu/OutputStream.java");
    1271         
    1272             out=new FileOutputStream("OutputStream.java");
    1273             
    1274             byte[] bs=new byte[1024];
    1275             int len=-1;
    1276             try {
    1277                 while((len=in.read(bs))!=-1){
    1278                     //把字节数组中的数据写入到文件中
    1279                     out.write(bs, 0, len);
    1280                     
    1281                 }
    1282             
    1283             
    1284         
    1285         
    1286         } catch (FileNotFoundException e) {
    1287             // TODO Auto-generated catch block
    1288             e.printStackTrace();
    1289         }
    1290         } catch (IOException e) {
    1291             // TODO Auto-generated catch block
    1292             e.printStackTrace();
    1293         }finally{
    1294             if(out!=null){
    1295                 try {
    1296                     out.close();
    1297                 } catch (IOException e) {
    1298                     // TODO Auto-generated catch block
    1299                     e.printStackTrace();
    1300                 }
    1301               if(in!=null){
    1302                   try {
    1303                     in.close();
    1304                 } catch (IOException e) {
    1305                     // TODO Auto-generated catch block
    1306                     e.printStackTrace();
    1307                 }
    1308                 
    1309             }
    1310             }
    1311         }
    1312         
    1313         
    1314         
    1315         
    1316         
    1317     }
    1318 
    1319 }
    1320 
    1321 使用字节流来图片视频拷贝
    1322 package zijieliu;
    1323 
    1324 import java.io.FileInputStream;
    1325 import java.io.FileNotFoundException;
    1326 import java.io.FileOutputStream;
    1327 import java.io.IOException;
    1328 import java.io.InputStream;
    1329 
    1330 public class CopyFileDemo {
    1331 
    1332     /**
    1333      * @param args
    1334      */
    1335     public static void main(String[] args) {
    1336         // TODO Auto-generated method stub
    1337         copyFile1();
    1338 
    1339     }
    1340     /*
    1341      * 
    1342      * 1.创建输入字节流的对象,输出字节流对象
    1343      * 2.读取数据 并且写入数据
    1344      * 3.关闭资源
    1345      */
    1346     public static void copyFile(){
    1347         InputStream in=null;
    1348         FileOutputStream out=null;
    1349         try {
    1350             
    1351             in=new FileInputStream("src/zijieliu/OutputStream.java");
    1352         
    1353             out=new FileOutputStream("OutputStream.java");
    1354             
    1355             byte[] bs=new byte[1024];
    1356             int len=-1;
    1357             try {
    1358                 while((len=in.read(bs))!=-1){
    1359                     //把字节数组中的数据写入到文件中
    1360                     out.write(bs, 0, len);
    1361                     
    1362                 }
    1363             
    1364             
    1365         
    1366         
    1367         } catch (FileNotFoundException e) {
    1368             // TODO Auto-generated catch block
    1369             e.printStackTrace();
    1370         }
    1371         } catch (IOException e) {
    1372             // TODO Auto-generated catch block
    1373             e.printStackTrace();
    1374         }finally{
    1375             if(out!=null){
    1376                 try {
    1377                     out.close();
    1378                 } catch (IOException e) {
    1379                     // TODO Auto-generated catch block
    1380                     e.printStackTrace();
    1381                 }
    1382               if(in!=null){
    1383                   try {
    1384                     in.close();
    1385                 } catch (IOException e) {
    1386                     // TODO Auto-generated catch block
    1387                     e.printStackTrace();
    1388                 }
    1389                 
    1390             }
    1391             }
    1392         }
    1393         
    1394         
    1395         
    1396         
    1397         
    1398     }
    1399 
    1400 
    1401 
    1402 
    1403 public static void copyFile1(){
    1404     InputStream in=null;
    1405     FileOutputStream out=null;
    1406     try {
    1407         
    1408         in=new FileInputStream("D:/1.mp4");
    1409     
    1410         out=new FileOutputStream("D:/q/1.mp4");
    1411         
    1412         byte[] bs=new byte[1024];
    1413         int len=-1;
    1414         try {
    1415             while((len=in.read(bs))!=-1){
    1416                 //把字节数组中的数据写入到文件中
    1417                 out.write(bs, 0, len);
    1418                 
    1419             }
    1420         
    1421         
    1422     
    1423     
    1424     } catch (FileNotFoundException e) {
    1425         // TODO Auto-generated catch block
    1426         e.printStackTrace();
    1427     }
    1428     } catch (IOException e) {
    1429         // TODO Auto-generated catch block
    1430         e.printStackTrace();
    1431     }finally{
    1432         if(out!=null){
    1433             try {
    1434                 out.close();
    1435             } catch (IOException e) {
    1436                 // TODO Auto-generated catch block
    1437                 e.printStackTrace();
    1438             }
    1439           if(in!=null){
    1440               try {
    1441                 in.close();
    1442             } catch (IOException e) {
    1443                 // TODO Auto-generated catch block
    1444                 e.printStackTrace();
    1445             }
    1446             
    1447         }
    1448         }
    1449     }
    1450     
    1451     
    1452     
    1453     
    1454     
    1455 }
    1456 
    1457 }
    1458 
    1459 字节流的高效缓冲区(复制三种方法)
    1460   
    1461 package zijieliu;
    1462 
    1463 import java.io.BufferedInputStream;
    1464 import java.io.BufferedOutputStream;
    1465 import java.io.FileInputStream;
    1466 import java.io.FileNotFoundException;
    1467 import java.io.FileOutputStream;
    1468 import java.io.IOException;
    1469 import java.io.InputStream;
    1470 
    1471 public class CopyBufferFileDemo {
    1472 
    1473     /**
    1474      * @param args
    1475      */
    1476     public static void main(String[] args) {
    1477         // TODO Auto-generated method stub
    1478         long startTime=System.currentTimeMillis();
    1479         
    1480         copyFile1();
    1481         long endTime=System.currentTimeMillis();
    1482         System.out.println("耗时:"+(endTime-startTime)+"毫秒");
    1483 
    1484     }
    1485     /*
    1486      * 
    1487      * 1.创建输入字节流的对象,输出字节流对象
    1488      * 2.读取数据 并且写入数据
    1489      * 3.关闭资源
    1490      */
    1491     public static void copyFile(){
    1492         InputStream in=null;
    1493         BufferedOutputStream out=null;
    1494         try {
    1495             //创建高效缓冲区输入流对象
    1496             in=new BufferedInputStream(new FileInputStream("D:/1.mp4"));
    1497         
    1498             out=new BufferedOutputStream(new FileOutputStream("D:/q/1.mp4"));
    1499             
    1500         
    1501             int len=-1;
    1502             try {
    1503                 while((len=in.read())!=-1){
    1504                     //把字节数组中的数据写入到文件中
    1505                     out.write( len);
    1506                     
    1507                 }
    1508             
    1509             
    1510         
    1511         
    1512         } catch (FileNotFoundException e) {
    1513             // TODO Auto-generated catch block
    1514             e.printStackTrace();
    1515         }
    1516         } catch (IOException e) {
    1517             // TODO Auto-generated catch block
    1518             e.printStackTrace();
    1519         }finally{
    1520             if(out!=null){
    1521                 try {
    1522                     out.close();
    1523                 } catch (IOException e) {
    1524                     // TODO Auto-generated catch block
    1525                     e.printStackTrace();
    1526                 }
    1527               if(in!=null){
    1528                   try {
    1529                     in.close();
    1530                 } catch (IOException e) {
    1531                     // TODO Auto-generated catch block
    1532                     e.printStackTrace();
    1533                 }
    1534                 
    1535             }
    1536             }
    1537         }
    1538         
    1539         
    1540         
    1541         
    1542         
    1543     }
    1544 
    1545 
    1546 
    1547 //复制最快
    1548 public static void copyFile1(){
    1549     InputStream in=null;
    1550     FileOutputStream out=null;
    1551     try {
    1552         
    1553         in=new FileInputStream("D:/1.mp4");
    1554     
    1555         out=new FileOutputStream("D:/q/1.mp4");
    1556         
    1557         byte[] bs=new byte[1024];
    1558         int len=-1;
    1559         try {
    1560             while((len=in.read(bs))!=-1){
    1561                 //把字节数组中的数据写入到文件中
    1562                 out.write(bs, 0, len);
    1563                 
    1564             }
    1565         
    1566         
    1567     
    1568     
    1569     } catch (FileNotFoundException e) {
    1570         // TODO Auto-generated catch block
    1571         e.printStackTrace();
    1572     }
    1573     } catch (IOException e) {
    1574         // TODO Auto-generated catch block
    1575         e.printStackTrace();
    1576     }finally{
    1577         if(out!=null){
    1578             try {
    1579                 out.close();
    1580             } catch (IOException e) {
    1581                 // TODO Auto-generated catch block
    1582                 e.printStackTrace();
    1583             }
    1584           if(in!=null){
    1585               try {
    1586                 in.close();
    1587             } catch (IOException e) {
    1588                 // TODO Auto-generated catch block
    1589                 e.printStackTrace();
    1590             }
    1591             
    1592         }
    1593         }
    1594     }
    1595     
    1596     
    1597     
    1598     
    1599     
    1600 }
    1601 
    1602 }
    1603 
    1604 范例3:从键盘输入学生信息存储到文件中,学生按年龄排序。
    1605 
    1606 package stu_model;
    1607 
    1608 public class Student implements Comparable<Student> {
    1609     private String name;
    1610     public String getName() {
    1611         return name;
    1612     }
    1613 
    1614 
    1615     public void setName(String name) {
    1616         this.name = name;
    1617     }
    1618 
    1619 
    1620     public int getAge() {
    1621         return age;
    1622     }
    1623 
    1624 
    1625     public void setAge(int age) {
    1626         this.age = age;
    1627     }
    1628 
    1629 
    1630     private int age;
    1631      
    1632 
    1633     @Override
    1634     public int compareTo(Student o) {
    1635         int num=this.age-o.getAge();
    1636         if(num==0){
    1637             
    1638             num=this.name.compareTo(o.getName());
    1639         }
    1640         // TODO Auto-generated method stub
    1641         return num;
    1642     }
    1643 
    1644 }
    1645 
    1646 
    1647 package stu_model;
    1648 
    1649 import java.io.BufferedWriter;
    1650 import java.io.FileWriter;
    1651 import java.io.IOException;
    1652 import java.util.Scanner;
    1653 import java.util.TreeSet;
    1654 
    1655 public class ScannerTest {
    1656     public static void main(String[] args) {
    1657         //定义学生的集合
    1658         TreeSet<Student> ts=new TreeSet<Student>();
    1659         //创建键盘输入对象
    1660         Scanner sc=new Scanner (System.in);
    1661         System.out.println("请输入你要输入几个学生:");
    1662         int count=sc.nextInt();
    1663         
    1664         for(int i=0;i<count;i++){
    1665             sc=new Scanner (System.in);
    1666             //获得学身份姓名
    1667             System.out.println("请输入学生姓名:");
    1668             String name=sc.nextLine();
    1669             //获得学生年龄
    1670             System.out.println("请输入学生年龄:");
    1671             Integer age=sc.nextInt();
    1672             //创建一个学生的对象
    1673             Student s=new Student();
    1674             s.setAge(age);
    1675             s.setName(name);
    1676             //把学生加入到集合中
    1677             ts.add(s);
    1678             
    1679             
    1680         }
    1681         BufferedWriter bw=null;
    1682         try {
    1683              bw=new BufferedWriter (new FileWriter("student"));
    1684              for(Student s:ts){
    1685                  bw.write(s.getName()+"----"+s.getAge());
    1686                  bw.newLine();
    1687                  
    1688                  
    1689              }
    1690              bw.flush();//字节流要用flash
    1691         } catch (IOException e) {
    1692             // TODO Auto-generated catch block
    1693             e.printStackTrace();
    1694         }finally{
    1695             try {
    1696                 if(bw!=null){
    1697                 bw.close();
    1698                 }
    1699             } catch (IOException e) {
    1700                 // TODO Auto-generated catch block
    1701                 e.printStackTrace();
    1702             }
    1703         }
    1704         System.out.println("写入文件完毕");
    1705     }
    1706 
    1707 }
    1708 
    1709 设计模式之装饰者模式
    1710 装饰着模式的目的是给类的功能增强。
    1711 继承也能给类的功能增强。
    1712 Writer类是写文件的类:有三个子类TxtWriter.   Mp3Wrter.   AviWriter
    1713 在Writer 中定义了与文件的标准。三个文件分别去实现Writer 中写的方法
    1714 |------- TXTWriter.
    1715    |----BufferedTxtWriter
    1716 |------- MP3Wrter.
    1717    |----BufferedMP3Writer
    1718 |------- AVIWriter
    1719    |----BufferedAVIWriter
    1720 如果想继续添加写文件的子类,如果想要对他做增强。还需要创建行营的缓冲区
    1721 装饰器的设计模式可以解决我们使用高效缓冲区,但是不需要每一个写文件的类都添加高效缓冲区
    1722 如果写文件的缓冲区是同样的原理,那么我们就可以把缓冲区抽取出来,作为装饰器
    1723 角色:
    1724 1.    抽象构件角色(定义写文件标准):Writer
    1725 
    1726 2.    具体构件角色(实现写文件标准):三个子类TXTWriter.   MP3Wrter.   AVIWriter
    1727 
    1728 3.    装饰角色(高效缓冲区)
    1729 代码示例
    1730 装饰者代码拓展
    1731 字符流和字节流的转换桥梁
    1732 范例:把从键盘输入的文本写入文件中 
    1733 代码
    1734 1735 package xiejpan_wjian;
    1736 import java.util.*;
    1737 import java.io.BufferedWriter;
    1738 import java.io.FileWriter;
    1739 import java.io.IOException;
    1740 import java.io.InputStream;
    1741 
    1742 public class ScannerDemo {
    1743     
    1744 
    1745     
    1746 
    1747     public static void main(String[] args) {
    1748         
    1749         //创建一个Scanner对象
    1750         Scanner sc=new Scanner(System.in);
    1751         System.out.println("请输入数据:");
    1752         
    1753         BufferedWriter bw=null;
    1754         try {
    1755            bw=new BufferedWriter(new FileWriter("c.txt"));
    1756            String line=null;
    1757            while((line=sc.nextLine())!=null){
    1758                if("exit".equals(line)){
    1759                    break;
    1760                   
    1761                }
    1762                bw.write(line);
    1763                bw.newLine();
    1764                bw.flush();
    1765                
    1766                
    1767            }
    1768            
    1769            
    1770         } catch (IOException e) {
    1771             // TODO Auto-generated catch block
    1772             e.printStackTrace();
    1773         }finally{
    1774             
    1775             if(bw!=null){
    1776                 
    1777                 try {
    1778                     bw.close();
    1779                 } catch (IOException e) {
    1780                     // TODO Auto-generated catch block
    1781                     e.printStackTrace();
    1782                 }
    1783                 
    1784             }
    1785         }
    1786     }
    1787 
    1788     private String nextLine() {
    1789         // TODO Auto-generated method stub
    1790         return null;
    1791     }
    1792 
    1793 }
    1794 
    1795 1.字节流转向字符流(InputStreamReader(System.in));)
    1796 package xiejpan_wjian;
    1797 
    1798 import java.io.BufferedReader;
    1799 import java.io.BufferedWriter;
    1800 import java.io.FileWriter;
    1801 import java.io.IOException;
    1802 import java.io.InputStream;
    1803 import java.io.InputStreamReader;
    1804 
    1805 
    1806 public class converterINDemo {
    1807     
    1808 
    1809     
    1810 
    1811     public static void main(String[] args) {
    1812                 //字符流和字节流的转换
    1813         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    1814         //定义写入的文件夹
    1815         
    1816         BufferedWriter bw=null;
    1817         try {
    1818              bw=new BufferedWriter(new FileWriter("w.txt"));
    1819         } catch (IOException e1) {
    1820             // TODO Auto-generated catch block
    1821             e1.printStackTrace();
    1822         }
    1823         
    1824         String line=null;
    1825         try {
    1826             while((line=br.readLine())!=null){
    1827                 if("exit".equals(line)){
    1828                     
    1829                     break;
    1830                 }
    1831                 bw.write(line);
    1832                 bw.newLine();
    1833                 bw.flush();
    1834                 
    1835             }
    1836         } catch (IOException e) {
    1837             // TODO Auto-generated catch block
    1838             e.printStackTrace();
    1839         }
    1840         
    1841     
    1842 }
    1843 }
    1844 
    1845 2.字符流转换成字节流new OutputStreamWriter(System.out));
    1846 范例:从一个文件中读取内容使用标准字节流来输出到控制台(使用字符串操作)
    1847 package xiejpan_wjian;
    1848 
    1849 import java.io.BufferedReader;
    1850 import java.io.BufferedWriter;
    1851 import java.io.FileNotFoundException;
    1852 import java.io.FileReader;
    1853 import java.io.FileWriter;
    1854 import java.io.IOException;
    1855 import java.io.InputStream;
    1856 import java.io.InputStreamReader;
    1857 import java.io.OutputStreamWriter;
    1858 
    1859 
    1860 public class converterOUTDemo {
    1861     
    1862 
    1863     
    1864 
    1865     public static void main(String[] args) {
    1866         BufferedWriter bw=null;
    1867         BufferedReader br=null;
    1868         try {
    1869            br=new BufferedReader(new FileReader("w.txt"));
    1870            bw=new BufferedWriter(new OutputStreamWriter(System.out));
    1871            String line=null;
    1872            try {
    1873             while((line=br.readLine())!=null){
    1874                    bw.write(line);
    1875                    bw.newLine();
    1876                    bw.flush();
    1877                }
    1878         } catch (IOException e) {
    1879             // TODO Auto-generated catch block
    1880             e.printStackTrace();
    1881         }
    1882            
    1883         } catch (FileNotFoundException e) {
    1884             // TODO Auto-generated catch block
    1885             e.printStackTrace();
    1886         }finally{
    1887             
    1888             if(bw!=null){
    1889                 try {
    1890                     bw.close();
    1891                 } catch (IOException e) {
    1892                     // TODO Auto-generated catch block
    1893                     e.printStackTrace();
    1894                 }
    1895                 
    1896             }
    1897             if(br!=null){
    1898                 
    1899                 try {
    1900                     br.close();
    1901                 } catch (IOException e) {
    1902                     // TODO Auto-generated catch block
    1903                     e.printStackTrace();
    1904                 }
    1905                 
    1906             }
    1907         }
    1908         
    1909 }
    1910 }
    1911 
    1912 打印流(强大)
    1913 打印流只做输出 没有输入
    1914 打印流分为字节打印流和字符打印流
    1915 PrintWriter:字符打印流
    1916 特点
    1917 1.    可以打印各种数据流
    1918 2.    封装了字符输出流,还可以字符流和字节流转换
    1919 3.    可以自动使用自动刷新,只有在调用println  printf 或format时才可能完成此操作
    1920 4.    可以直接想文件中写数据
    1921 PrintWriter
    1922 
    1923 package print;
    1924 
    1925 import java.io.FileNotFoundException;
    1926 import java.io.PrintWriter;
    1927 
    1928 public class printDemo {
    1929     public static void main(String[] args) {
    1930         //System.out.println("helloword");
    1931         PrintWriter pw=null;
    1932         try {
    1933          pw=new PrintWriter("b.txt");
    1934          pw.print(true);
    1935          pw.print('q');
    1936          pw.print("rwn");
    1937          pw.print(12);
    1938         } catch (FileNotFoundException e) {
    1939             // TODO Auto-generated catch block
    1940             e.printStackTrace();
    1941         }finally{
    1942             
    1943     
    1944             
    1945             
    1946             if(pw!=null){
    1947                 pw.close();
    1948                 
    1949             }
    1950         }
    1951         
    1952     }
    1953     
    1954 
    1955 }
    1956 范例:从文件中读取数据并且打印在控制台
    1957 package print;
    1958 
    1959 import java.io.BufferedReader;
    1960 import java.io.FileNotFoundException;
    1961 import java.io.FileReader;
    1962 import java.io.IOException;
    1963 import java.io.PrintWriter;
    1964 
    1965 public class printDemo1 {
    1966     public static void main(String[] args) {
    1967         //定义缓冲区输入流对象
    1968         BufferedReader br=null;
    1969          PrintWriter pw=null;
    1970       try {
    1971          br=new BufferedReader(new FileReader("a.txt"));
    1972          // pw=new PrintWriter(System.out);
    1973          //设置自动刷新
    1974          pw=new PrintWriter(System.out,true);
    1975          String line=null;
    1976      try {
    1977         while((line=br.readLine())!=null){
    1978               pw.print(line);
    1979              pw.flush();
    1980              
    1981          }
    1982     } catch (IOException e) {
    1983         // TODO Auto-generated catch block
    1984         e.printStackTrace();
    1985     }
    1986          
    1987     } catch (FileNotFoundException e) {
    1988         // TODO Auto-generated catch block
    1989         e.printStackTrace();
    1990     }finally{
    1991         if(pw!=null){
    1992             
    1993             
    1994             pw.close();
    1995         }
    1996         if(br!=null){
    1997             
    1998             try {
    1999                 br.close();
    2000             } catch (IOException e) {
    2001                 // TODO Auto-generated catch block
    2002                 e.printStackTrace();
    2003             }
    2004             
    2005         }
    2006         
    2007     }
    2008         
    2009     }
    2010     
    2011 
    2012 }
    2013 范例:使用打印流来复制文本文件
    2014 package print;
    2015 
    2016 import java.io.BufferedReader;
    2017 import java.io.FileNotFoundException;
    2018 import java.io.FileReader;
    2019 import java.io.FileWriter;
    2020 import java.io.IOException;
    2021 import java.io.PrintWriter;
    2022 
    2023 public class printDemo1 {
    2024     public static void main(String[] args) {
    2025         //定义缓冲区输入流对象
    2026         BufferedReader br=null;
    2027          PrintWriter pw=null;
    2028       try {
    2029          br=new BufferedReader(new FileReader("a.txt"));
    2030          // pw=new PrintWriter(System.out);
    2031          //设置自动刷新
    2032         // pw=new PrintWriter(System.out,true);
    2033          try {
    2034             pw=new PrintWriter(new FileWriter("a1.txt"),true);
    2035         } catch (IOException e1) {
    2036             // TODO Auto-generated catch block
    2037             e1.printStackTrace();
    2038         }
    2039          String line=null;
    2040      try {
    2041         while((line=br.readLine())!=null){
    2042               pw.print(line);
    2043                          
    2044          }
    2045     } catch (IOException e) {
    2046         // TODO Auto-generated catch block
    2047         e.printStackTrace();
    2048     }
    2049          
    2050     } catch (FileNotFoundException e) {
    2051         // TODO Auto-generated catch block
    2052         e.printStackTrace();
    2053     }finally{
    2054         if(pw!=null){
    2055             
    2056             
    2057             pw.close();
    2058         }
    2059         if(br!=null){
    2060             
    2061             try {
    2062                 br.close();
    2063             } catch (IOException e) {
    2064                 // TODO Auto-generated catch block
    2065                 e.printStackTrace();
    2066             }
    2067             
    2068         }
    2069         
    2070     }
    2071         
    2072     }
    2073     
    2074 
    2075 }
    2076 187over
    2077 Properties类
    2078 Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
    2079 特点: 
    2080 1.    继承与HashTable,是线程安全的键值对存储数据
    2081 2.    Properties可保存在流中或从流中加载
    2082 3.    只保存字符串的键值对,
    2083 构造器 
    2084 构造方法摘要
    2085 Properties() 
    2086           创建一个无默认值的空属性列表。    
    2087 
    2088 代码示例
    2089 
    2090 List
    2091 package Properties;
    2092 
    2093 import java.io.FileWriter;
    2094 import java.io.IOException;
    2095 import java.io.PrintWriter;
    2096 import java.util.Properties;
    2097 import java.util.Set;
    2098 
    2099 public class Properties2 {
    2100     public static void main(String[] args) {
    2101         
    2102         Properties prop=new Properties();
    2103         
    2104         prop.setProperty("name","zhangsan ");
    2105         prop.setProperty("gender", "male");
    2106         prop.setProperty("age", "10");
    2107         PrintWriter pw =null;
    2108         try {
    2109              pw =new PrintWriter(new FileWriter("prop1.txt"));
    2110                prop.list(pw);
    2111             
    2112         } catch (IOException e) {
    2113             // TODO Auto-generated catch block
    2114             e.printStackTrace();
    2115         }finally{
    2116             
    2117             if(pw!=null){
    2118                 
    2119                 pw.close();
    2120                 
    2121             }
    2122         }
    2123         
    2124         
    2125     }
    2126 
    2127 }
    2128 Load
    2129 package Properties;
    2130 
    2131 import java.io.FileReader;
    2132 import java.io.FileWriter;
    2133 import java.io.IOException;
    2134 import java.io.PrintWriter;
    2135 import java.util.Properties;
    2136 import java.util.Set;
    2137 
    2138 public class Properties3 {
    2139     public static void main(String[] args) {
    2140         
    2141         Properties prop=new Properties();
    2142         FileReader fr=null;
    2143         
    2144         
    2145         try {
    2146              fr=new FileReader("prop1.txt");
    2147              prop.load(fr);
    2148              String name=prop.getProperty("name");
    2149              String age=prop.getProperty("age");
    2150              String gender=prop.getProperty("gender");
    2151              System.out.println(name);
    2152              System.out.println(age);
    2153              System.out.println(gender);
    2154         } catch (IOException e) {
    2155             // TODO Auto-generated catch block
    2156             e.printStackTrace();
    2157         }finally{
    2158             
    2159             if(fr!=null){
    2160                 
    2161                 try {
    2162                     fr.close();
    2163                 } catch (IOException e) {
    2164                     // TODO Auto-generated catch block
    2165                     e.printStackTrace();
    2166                 }
    2167                 
    2168             }
    2169         }
    2170         
    2171         
    2172     }
    2173 
    2174 }
    2175 Store
    2176 package Properties;
    2177 
    2178 import java.io.FileReader;
    2179 import java.io.FileWriter;
    2180 import java.io.IOException;
    2181 import java.io.PrintWriter;
    2182 import java.util.Properties;
    2183 import java.util.Set;
    2184 
    2185 public class Properties5 {
    2186     public static void main(String[] args) {
    2187         
    2188      Properties prop=new Properties();
    2189         
    2190         prop.setProperty("name","zhangsan ");
    2191         prop.setProperty("gender", "male");
    2192         prop.setProperty("age", "10");
    2193         FileWriter fw=null;
    2194         try {
    2195             fw=new FileWriter("prop2.txt");
    2196             prop.store(fw,null);
    2197         } catch (IOException e) {
    2198             // TODO Auto-generated catch block
    2199             e.printStackTrace();
    2200         }finally{
    2201             
    2202             if(fw!=null){
    2203                 
    2204                 try {
    2205                     fw.close();
    2206                 } catch (IOException e) {
    2207                     // TODO Auto-generated catch block
    2208                     e.printStackTrace();
    2209                 }
    2210                 
    2211             }
    2212         }
    2213         
    2214         
    2215     }
    2216 
    2217 }
    2218 四.线程
    2219 1.线程的概述
    2220 进程:计算机中特定功能的程序在数据集上的一次一年运行
    2221 线程:线程是进程的一个单元
    2222 多线程:一个进程有多个线程在同时运行,如寻来的下载 迅雷运行一次就是一个进程,那么在迅雷中可以同时下载等多个电影 ,这就是多线程(每一个下载都是一个线程)
    2223 Jvm是多线程的,在我们运行Jvm 时候后台会运行垃圾回收的线程,来清理没有被引用的对象。
    2224 
    2225 
    2226 
    2227 
    2228 
    2229 
    2230 
    2231 2.线程的实现方法一
    2232  创建新执行线程两种方法,(1)酱类声明为Thread的子类 该子类应重写 Thread类的run方法。接下来而可以分配并启动盖子类的实例,
    2233 线程启动的时候使用线程的start方法 而我不是run 
    2234 package Tread;
    2235 
    2236 public class treaddemo {
    2237 
    2238     
    2239     public static void main(String[] args) {
    2240         //创建现成的实例对象
    2241         CountThread ct=new CountThread();
    2242         CountThread ct1=new CountThread();
    2243         
    2244            //并不是线程 只是调用run方法 ct.run();
    2245         //启动线程(双启动)
    2246         ct.start();
    2247         ct1.start();
    2248 
    2249     }
    2250 
    2251 }
    2252 
    2253 package Tread;
    2254 
    2255 public class CountThread extends Thread {
    2256     //线程的执行体
    2257     @Override
    2258     public void run() {
    2259         for(int i=0;i<17;i++){
    2260             System.out.println(this.getName()+"hello"+i);
    2261             
    2262         }
    2263         // TODO Auto-generated method stub
    2264         
    2265     }
    2266 
    2267 
    2268     
    2269 }
    2270 
    2271 
    2272 .线程的实现方法二
    2273 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。
    2274 示例代码:
    2275 package Tread;
    2276 
    2277 public class CountThread1 implements Runnable {
    2278 
    2279     @Override
    2280     public void run() {
    2281         for(int i=0;i<17;i++){
    2282             //输出线程的名字
    2283             System.out.println(Thread.currentThread().getName()+"---hello"+i);
    2284             
    2285         }
    2286 
    2287 }
    2288 }
    2289 
    2290 测试代码
    2291 package Tread;
    2292 
    2293 public class treaddemo1 {
    2294 
    2295     
    2296     public static void main(String[] args) {
    2297         //创建两个线程
    2298         CountThread1 ct =new CountThread1();
    2299         //实际工程中很少命名
    2300         //Thread t1 =new Thread(ct,"线程一");
    2301         Thread t1 =new Thread(ct);
    2302         CountThread1 ct2 =new CountThread1();
    2303         //Thread t2 =new Thread(ct2,"线程二");
    2304         Thread t2 =new Thread(ct2);
    2305         t1.start();
    2306         t2.start();
    2307     
    2308         
    2309         
    2310     }
    2311 
    2312 }
    2313 
    2314 197over
    2315 3.线程的执行原理
    2316 
    2317 
    2318 
    2319                 三个随机开始(抢资源)
    2320 
    2321 
    2322 
    2323 
    2324 
    2325 
    2326 
    2327 
    2328 
    2329 
    2330 线程的并发执行通过多个线程不断的切换CPU的资源这个速度非常快,我么嗯感受不到 我们能感受到的就是三个个线程在并发的执行
    2331 4.    线程的生命周期
    2332 1.    新建:线程被NEW出来
    2333 2.    准备就绪:线程具有执行资格,即线程调用了START()
    2334 3.    运行:具备执行的资格和执行的权力。
    2335 4.    阻塞:没有执行资格和执行权力
    2336 5.    销毁:线程的对象变成垃圾,释放资源
    2337  
    2338     Start()
    2339 
    2340 
    2341 Sleep时间到    等cpu的状态
    2342 Notify()    强到cpu
    2343     
    2344     Sleep()    Run()结束
    2345 
    2346     Wait()
    2347 
    2348 
    2349 5.并发
    2350 互联网的项目中存在着大量的并发案例,如买火车票 电商项目
    2351 范例:火车站有一百张票 4个窗口同是卖
    2352 分析:四个窗口是四个线程同时运行 100张票四个线程的共享资源
    2353 采用继承Thread来实现(并发问题:避免两个窗口同时卖一张票)
    2354 
    2355 线程一    线程二
    2356 
    2357 
    2358 
    2359 
    2360 
    2361 
    2362 
    2363     解决方案:
    2364 
    2365 
    2366 
    2367 
    2368 
    2369 
    2370 
    2371 针对线程的案的安全性,我们需要使用同步(就是加锁,共享资源只能一个人同时访问)
    2372 语法:synchronized(锁对象(非共享)){
    2373 //操作共享资源的代码
    2374 }
    2375 同步代码加在什么地方?
    2376 1.    代码同时多个线程访问
    2377 2.    代码中有共享资源
    2378 3.    共享数据被多条语句操作
    2379 package tickets;
    2380 /*
    2381 4.     * 
    2382 5.     * 买票的床口
    2383 6.     */
    2384 7.    public class selltickets extends  Thread{
    2385 8.        
    2386 9.        private String name;
    2387 10.        public selltickets(String name) {
    2388 11.            super(name);
    2389 12.        
    2390 13.            
    2391 14.        }
    2392 15.        
    2393 16.        //100 张票是共享资源
    2394 17.        private  static int tickets  = 100;
    2395 18.        
    2396 19.        //同步钥匙(一把钥匙)
    2397 20.        //private static Object obj=new Object();
    2398 21.        private static A a=new A();
    2399 22.        public void run() {
    2400 23.            while(true){
    2401 24.                
    2402 25.                synchronized(a){
    2403 26.                if(tickets>0){
    2404 27.                    try {
    2405 28.                        //放慢线程运行速度
    2406 29.                        Thread.sleep(20);
    2407 30.                    } catch (InterruptedException e) {
    2408 31.                        // TODO Auto-generated catch block
    2409 32.                        e.printStackTrace();
    2410 33.                    }
    2411 34.                    System.out.println(this.getName()+"正在卖"+tickets--+"票");
    2412 35.                }else{
    2413 36.                    
    2414 37.                    System.out.println("票已经售完了");
    2415 38.                    break;
    2416 39.                }
    2417 40.                }
    2418 41.            }
    2419 42.            
    2420 43.            // TODO Auto-generated constructor stub
    2421 44.        }
    2422 45.    
    2423 46.        
    2424 47.    
    2425 48.    
    2426 49.        
    2427 50.    
    2428 51.    }
    2429 52.    class A{
    2430 53.        54.        55.    }
    2431 package tickets;
    2432 
    2433 public class TicketsTest {
    2434 
    2435     /**
    2436      * @param args
    2437      */
    2438     public static void main(String[] args) {
    2439         // TODO Auto-generated method stub
    2440         selltickets st1=new selltickets("窗口一");
    2441         selltickets st2=new selltickets("窗口二");
    2442         selltickets st3=new selltickets("窗口三");
    2443         selltickets st4=new selltickets("窗口四");
    2444         st1.start();
    2445         st2.start();
    2446         st3.start();
    2447         st4.start();
    2448 
    2449     }
    2450 
    2451 }
    2452 
    2453 Synchronized同步代码块的锁定对象可以是任意的类对象 (线程的实现方式是继承于Thread)这个对象必须是线程共享的(静态的)
    2454 Synchronized是可以加在方法上的,如果是静态方法Synchronized的锁对象就是类的类对象,如果不是静态的方法,Synchronized如果加在对象方法上,那么他的锁是this
    2455 实例;
    2456 package tickets1;
    2457 /*
    2458  * 
    2459  * 买票的床口
    2460  */
    2461 public class selltickets implements  Runnable{
    2462     
    2463     
    2464     //100 张票是共享资源
    2465     private int tickets  = 100;
    2466     private Object obj =new Object();
    2467     //同步钥匙(一把钥匙)
    2468     //private static Object obj=new Object();
    2469     //private static A a=new A();
    2470     public void run() {
    2471         while(true){
    2472             int i=0;
    2473             if(i%2==0){
    2474             //同步代码块
    2475             synchronized(obj){
    2476             if(tickets>0){
    2477                 try {
    2478                     //放慢线程运行速度
    2479                     Thread.sleep(50);
    2480                 } catch (InterruptedException e) {
    2481                     // TODO Auto-generated catch block
    2482                     e.printStackTrace();
    2483                 }
    2484                 System.out.println(Thread.currentThread().getName()+"正在卖"+tickets--+"票");
    2485             }else{
    2486                 
    2487                 System.out.println("票已经售完了");
    2488                 break;
    2489             }
    2490             }
    2491             }else {
    2492                 //同步代码块
    2493                 
    2494                     if(tickets>0){
    2495                         try {
    2496                             //放慢线程运行速度
    2497                             Thread.sleep(100);
    2498                         } catch (InterruptedException e) {
    2499                             // TODO Auto-generated catch block
    2500                             e.printStackTrace();
    2501                         }
    2502                         System.out.println(Thread.currentThread().getName()+"正在卖"+tickets--+"票");
    2503                     }else{
    2504                         
    2505                         System.out.println("票已经售完了");
    2506                         break;
    2507                     }
    2508                     }
    2509                 //saleTickets();
    2510                 i++;
    2511             }
    2512             
    2513         }
    2514 }
    2515     
    2516         /*
    2517          * 静态方法synchronized锁是当前类的类对象
    2518          * 
    2519          */
    2520         // TODO Auto-generated constructor stub
    2521     /*public synchronized  void saleTickets(){
    2522         
    2523             if(tickets>0){
    2524                 try {
    2525                     //放慢线程运行速度
    2526                     Thread.sleep(50);
    2527                 } catch (InterruptedException e) {
    2528                     // TODO Auto-generated catch block
    2529                     e.printStackTrace();
    2530                 }
    2531                 System.out.println(Thread.currentThread().getName()+"正在卖"+tickets--+"票");
    2532             }else{
    2533                 
    2534                 System.out.println("票已经售完了");
    2535                 
    2536             }
    2537             }
    2538         
    2539     }*/
    2540 package tickets1;
    2541 
    2542 public class TicketsTest {
    2543 
    2544     /**
    2545      * @param args
    2546      */
    2547     public static void main(String[] args) {
    2548         // TODO Auto-generated method stub
    2549         selltickets st1=new selltickets();
    2550         Thread t1=new Thread(st1,"窗口1");
    2551         Thread t2=new Thread(st1,"窗口2");
    2552         Thread t3=new Thread(st1,"窗口3");
    2553         Thread t4=new Thread(st1,"窗口4");
    2554         t1.start();
    2555         t2.start();
    2556         t3.start();
    2557         t4.start();
    2558 
    2559     }
    2560 
    2561 }
    2562 
    2563 6.    线程的休眠
    2564 在线程的休眠是必要的,在做服务端的时候为了减少服务器的压力我们需要休眠,如果休眠是在同步代码块中执行,休眠不会让出锁对象。
    2565 7.线程之间的通信
    2566 生产者和消费者
    2567 
    2568 
    2569 生产者线程    消费者线程
    2570 
    2571 
    2572 
    2573 
    2574 
    2575 
    2576 生产者生成水果,如果水果没有被买走那么就不生产处于等待状态,如果水果被消费者买走就生产买走的时候会通知生产者告诉他我们已经把水果买走了请生产,消费者同理,如果水果已经生产出来那么就买走 ,买走之后再通知生产者水果偶已经没了请生产。
    2577 
    2578 注意:1.线程间的通信共享数据一定要在同步代码块synchronized:
    2579       2.一定要有wait和notify ,而且二者一定是成对出现 
    2580       3.生产者和消费者的线程实现一定是在while(true)中
    2581 示例代码:
    2582 
    2583 Tx
    2584 8线程优先级
    2585 通过 public final void setPriority (int newPriority) 来设置线程的有优先级 但是优先级并不是绝对大的 只是相对其他的线程得到的CPU资源更多一些。(随机性)
    2586 示例代码:
    2587 package prio;
    2588 
    2589 public class prioThread extends Thread {
    2590     
    2591     private String name;
    2592 
    2593     public prioThread(String name) {
    2594         //super();
    2595         this.name=name;
    2596         
    2597     }
    2598 
    2599     @Override
    2600     public void run() {
    2601         for(int i=0;i<10;i++){
    2602             
    2603             System.out.println(this.getName()+"正在运行"+i);
    2604         }
    2605     
    2606     }
    2607     
    2608 
    2609 }
    2610 
    2611 package prio;
    2612 
    2613 public class prioTest {
    2614     public static void main(String[] args) {
    2615         prioThread pt =new prioThread("线程1");
    2616         prioThread pt1 =new prioThread("线程2");
    2617         prioThread pt2 =new prioThread("线程3");
    2618         /*System.out.println(pt.getPriority());
    2619         System.out.println(pt1.getPriority());
    2620         System.out.println(pt2.getPriority());*/
    2621         pt.setPriority(10);
    2622         
    2623         pt.start();
    2624         pt1.start();
    2625         pt2.start();
    2626         
    2627         
    2628     }
    2629     
    2630     
    2631 
    2632 }
    2633 
    2634 9.加入线程
    2635 join 线程都会抢先执行CPU执行线程 其他线程再来执行
    2636 package prio.join;
    2637 
    2638 public class joinThread extends Thread {
    2639     
    2640     private String name;
    2641 
    2642     public joinThread(String name) {
    2643         //super();
    2644         this.name=name;
    2645         
    2646     }
    2647 
    2648     @Override
    2649     public void run() {
    2650         for(int i=0;i<10;i++){
    2651             
    2652             System.out.println(this.getName()+"正在运行"+i);
    2653         }
    2654     
    2655     }
    2656     
    2657 
    2658 }
    2659 
    2660 package prio.join;
    2661 
    2662 public class joinTest {
    2663     public static void main(String[] args) {
    2664         joinThread pt =new joinThread("线程1");
    2665         joinThread pt1 =new joinThread("线程2");
    2666         joinThread pt2 =new joinThread("线程3");
    2667         /*System.out.println(pt.getPriority());
    2668         System.out.println(pt1.getPriority());
    2669         System.out.println(pt2.getPriority());*/
    2670         pt.setPriority(10);
    2671         
    2672         pt2.start();
    2673         try {
    2674             //join 线程都会抢先执行CPU 来执行线程 其他线程再来执行
    2675             pt2.join();
    2676         } catch (InterruptedException e) {
    2677             // TODO Auto-generated catch block
    2678             e.printStackTrace();
    2679         }
    2680         pt.start();
    2681         pt1.start();
    2682         
    2683         
    2684         
    2685     }
    2686     
    2687     
    2688 
    2689 }
    2690 
    2691 10.等待线程
    2692 Static void    Vield()
    2693 暂停的当前正在执行的线程对象并执行其他线程
    2694 当前的线程从运行回到就绪状态 目的把CPU资源让给其他线程
    2695 package prio.yield;
    2696 
    2697 public class yieldThread extends Thread {
    2698     
    2699     private String name;
    2700 
    2701     public yieldThread(String name) {
    2702         //super();
    2703         this.name=name;
    2704         
    2705     }
    2706 
    2707     @Override
    2708     public void run() {
    2709         for(int i=0;i<10;i++){
    2710             
    2711             System.out.println(this.getName()+"正在运行"+i);
    2712             //当前线程回到就绪状态 让出CPU (谦让执行 )
    2713             Thread.yield();
    2714         }
    2715     
    2716     }
    2717     
    2718 
    2719 }
    2720 
    2721 package prio.yield;
    2722 
    2723 public class yieldTest {
    2724     public static void main(String[] args) {
    2725         yieldThread pt =new yieldThread("线程1");
    2726         yieldThread pt1 =new yieldThread("线程2");
    2727         yieldThread pt2 =new yieldThread("线程3");
    2728         
    2729         
    2730         pt2.start();
    2731         pt.start();
    2732         pt1.start();
    2733         
    2734         
    2735         
    2736     }
    2737     
    2738     
    2739 
    2740 }
    2741 
    2742 11.守护线程
    2743 Void    SetDaemon(Boolean on)
    2744 将线程标记为守护线程或用户线程
    2745 守护线程会随着主线程的结束而结束
    2746 package prio.daemon;
    2747 
    2748 public class daemonThread extends Thread {
    2749     
    2750     private String name;
    2751 
    2752     public daemonThread(String name) {
    2753         //super();
    2754         this.name=name;
    2755         
    2756     }
    2757 
    2758     @Override
    2759     public void run() {
    2760         for(int i=0;i<10;i++){
    2761             
    2762             System.out.println(this.getName()+"正在运行"+i);
    2763             //当前线程回到就绪状态 让出CPU (谦让执行 )
    2764             Thread.yield();
    2765         }
    2766     
    2767     }
    2768     
    2769 
    2770 }
    2771 
    2772 package prio.daemon;
    2773 
    2774 public class daemonTest {
    2775     public static void main(String[] args) {
    2776         daemonThread pt =new daemonThread("线程1");
    2777         daemonThread pt1 =new daemonThread("线程2");
    2778         
    2779         
    2780         
    2781         pt.setDaemon(true);
    2782         pt1.setDaemon(true);
    2783         pt.start();
    2784         pt1.start();
    2785         for(int i=0;i<10;i++){
    2786             
    2787             System.out.println(Thread.currentThread().getName()+"线程正在在运行"+i);
    2788         }
    2789         
    2790         
    2791     }
    2792     
    2793     
    2794 
    2795 }
    2796 
    2797 12.线程死锁
    2798 
    2799 
    2800 
    2801 
    2802 
    2803 
    2804 
    2805 
    2806 示例代码:
    2807 package dirrlock;
    2808 
    2809 public class Lock {
    2810     static Object lock1 =new Object(); 
    2811     static Object lock2 =new Object(); 
    2812     
    2813 
    2814 }
    2815 
    2816 package dirrlock;
    2817 
    2818 public class DirLockDemo  implements Runnable{
    2819     private boolean flag;
    2820    
    2821     public DirLockDemo(boolean flag) {
    2822         super();
    2823         this.flag = flag;
    2824     }
    2825 
    2826     public void run() {
    2827         if(flag){
    2828             synchronized (Lock.lock1){
    2829                 System.out.println("线程1 拿到带第1把锁");
    2830                 synchronized (Lock.lock2) {
    2831                     System.out.println("线程1拿到带第2把锁");
    2832                     
    2833                 }
    2834                 
    2835             }
    2836             
    2837         }else{
    2838             
    2839             synchronized (Lock.lock2) {
    2840                 System.out.println("线程2拿到带第2把锁");
    2841                 synchronized (Lock.lock1) {
    2842                     System.out.println("线程2拿到带第1把锁");
    2843                     
    2844                 }
    2845             }
    2846         }
    2847         
    2848     }
    2849     
    2850 
    2851 }
    2852 
    2853 package dirrlock;
    2854 
    2855 public class DieLockTest {
    2856     public static void main(String[] args) {
    2857         DirLockDemo dl1=new DirLockDemo(true);
    2858         DirLockDemo dl2=new DirLockDemo(true);
    2859         
    2860         Thread t1=new Thread(dl1);
    2861         Thread t2=new Thread(dl2);
    2862         t1.start();
    2863         t2.start();
    2864         
    2865         
    2866         
    2867     }
    2868 
    2869 }
    2870 
    2871 五.网络编程
    2872 网络通信三大条件:
    2873 IP   端口  协议
    2874 package net1;
    2875 
    2876 import java.net.DatagramPacket;
    2877 import java.net.DatagramSocket;
    2878 import java.net.InetAddress;
    2879 
    2880 public class UDPClient {
    2881     public static void main(String[] args) {
    2882         // 创建客户端的套换字对象
    2883         DatagramSocket ds = null;
    2884         try {
    2885             ds = new DatagramSocket();
    2886             byte[] bs = "你好".getBytes();
    2887             // 创建要发送的目的地IP对象
    2888             InetAddress ia = InetAddress.getByName("192.168.1.1");
    2889             // 打数据包
    2890             DatagramPacket dp = new DatagramPacket(bs, bs.length, ia, 10000);
    2891             // 发送
    2892             ds.send(dp);
    2893 
    2894         } catch (Exception e) {
    2895             // TODO Auto-generated catch block
    2896             e.printStackTrace();
    2897         } finally {
    2898             if (ds != null) {
    2899                 ds.close();
    2900             }
    2901         }
    2902     }
    2903 
    2904 }
    2905 package net1;
    2906 
    2907 import java.net.DatagramPacket;
    2908 import java.net.DatagramSocket;
    2909 import java.net.InetAddress;
    2910 
    2911 
    2912 public class UDPCSerever {
    2913     public static void main(String[] args) {
    2914         // 创建UDP服务端对象 必须指定端口
    2915         DatagramSocket ds = null;
    2916         try {
    2917             ds = new DatagramSocket(10000);
    2918 
    2919             // 定义接受数据字节的数组
    2920             byte[] bs = new byte[1024];
    2921             // 定义接收的数据包
    2922             DatagramPacket dp = new DatagramPacket(bs, bs.length);
    2923             System.out.println("服务器已启动");
    2924             // 数据包的接收
    2925             ds.receive(dp);
    2926             // 获得发送端的IP
    2927             InetAddress ia = dp.getAddress();
    2928             // 获取数据包中的数据,这个数组的长度是我们自己定义时的长度(1024)
    2929             byte[] bs1 = dp.getData();
    2930             //获得接受数据的长度(实际接受的数据的长度)
    2931             int len =dp.getLength();
    2932             // 组装接受的数据
    2933             String data = new String(bs1, 0, len);
    2934             System.out.println(ia.getHostAddress() + "发送了:" + data);
    2935         } catch (Exception e) {
    2936             // TODO Auto-generated catch block
    2937             e.printStackTrace();
    2938         } finally {
    2939 
    2940             if (ds != null) {
    2941 
    2942                 ds.close();
    2943             }
    2944         }
    2945 
    2946     }
    2947 
    2948 }
  • 相关阅读:
    C# CodeFirst(EF框架)代码优先创建数据库
    Entity Framework 配置关系(1对1,1对0)
    Entity Framework 配置关系(1对1,1对0)
    EFDbContext的使用
    EFDbContext的使用
    编程模式·观察者模式、事件通知、消息队列三者区别
    编程模式·观察者模式、事件通知、消息队列三者区别
    设计模式发布订阅方式实现异步并发
    设计模式发布订阅方式实现异步并发
    关于访问asp.net网站时登录后的奇怪问题
  • 原文地址:https://www.cnblogs.com/Pythons/p/10498578.html
Copyright © 2020-2023  润新知