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 }
原文地址:https://www.cnblogs.com/Pythons/p/10498578.html