zoukankan      html  css  js  c++  java
  • 第九周课程总结 & 实验报告(七)

    第九周课程总结

    一、多线程
        1.线程的状态
         2.线程操作的相关方法
    二、Java IO
        1.操作文件的类---File
    1)基本介绍
           (2)使用File类操作文件
                   
         2.RandomAccessFile类
    1)写入数据
           (2)读取数据
         3.字节流与字符流1)字节流
            (2)字符流
            (3)区别
                   

    一、多线程
       
    1.线程的状态
         2.线程操作的相关方法
    二、Java IO

    1.操作文件的类---File
    1)基本介绍

    在整个IO包中,唯一表示与文件本身有关的类就是File类,使用File类可以进行创建或删除文件等。

    File类的构造方法

    public File(String pathname)-->实例化File类的时候,必须设置号路径。

       
          2)使用File类操作文件
    创建

    使用createNewFile()

    ......
    File f = new File("路径");
    try{                  //此方法使用了throws关键字,必须进行异常处理
        f.createNewFile();
    }catch(IOException e){
          e.printStackTrace();
    }


    删除

    使用delete()方法

    ......
    File f = new File("路径");
    f.delete();


     综合(判断)

    使用exists()方法

    ......
    File f = new File("路径");
    if(f.exists()){           //判断文件是否存在
    ......
    }


     创建文件夹

    使用mkdir()方法

    列出指定目录的文件

    1.public String[]list():列出全部名称,返回一个字符串数组。

    2.public File[] listFiles():列出完整路径,返回一个File对象数组。

     判断一个给定的路径是否是目录

    使用isDirectory()方法

    列出指定目录的全部文件

    package org.lxh.iodemo.filedemo;
    import java.io.File;
    public class FileDemo11{
             public static void main(String args[]){
                      File my = new File("d:"+File.separator);
                      print(my);
             }
    
             public static void print(File file){
                     if(file!=null){
                         if(file.isDirector()){
                              File f[] = fiel.listFile();
                              if(f != null){
                                     for(int i = 0;i<f.length;i++){
                                              print(f[i]);
                                      }
                              }
                          }else{
                                  System.out.println(file);
                           }
                      }
            }
    }



          2.RandomAccessFile类
           (1)写入数据

    import java.io.File ;
    import java.io.RandomAccessFile ;
    public class RandomAccessFileDemo01{
        // 所有的异常直接抛出,程序中不再进行处理
        public static void main(String args[]) throws Exception{
            File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件
            RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象
            rdf = new RandomAccessFile(f,"rw") ;// 读写模式,如果文件不存在,会自动创建
            String name = null ;
            int age = 0 ;
            name = "zhangsan" ;            // 字符串长度为8
            age = 30 ;                    // 数字的长度为4
            rdf.writeBytes(name) ;        // 将姓名写入文件之中
            rdf.writeInt(age) ;            // 将年龄写入文件之中
            name = "lisi    " ;            // 字符串长度为8
            age = 31 ;                    // 数字的长度为4
            rdf.writeBytes(name) ;        // 将姓名写入文件之中
            rdf.writeInt(age) ;            // 将年龄写入文件之中
            name = "wangwu  " ;            // 字符串长度为8
            age = 32 ;                    // 数字的长度为4
            rdf.writeBytes(name) ;        // 将姓名写入文件之中
            rdf.writeInt(age) ;            // 将年龄写入文件之中
            rdf.close() ;                // 关闭
        }
    };

    以上完成了写入的操作,每条数据的长度都是12位。


           (2)读取数据

    import java.io.File ;
    import java.io.RandomAccessFile ;
    public class RandomAccessFileDemo02{
        // 所有的异常直接抛出,程序中不再进行处理
        public static void main(String args[]) throws Exception{
            File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件
            RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象
            rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件
            String name = null ;
            int age = 0 ;
            byte b[] = new byte[8] ;    // 开辟byte数组
            // 读取第二个人的信息,意味着要空出第一个人的信息
            rdf.skipBytes(12) ;        // 跳过第一个人的信息
            for(int i=0;i<b.length;i++){
                b[i] = rdf.readByte() ;    // 读取一个字节
            }
            name = new String(b) ;    // 将读取出来的byte数组变为字符串
            age = rdf.readInt() ;    // 读取数字
            System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
            // 读取第一个人的信息
            rdf.seek(0) ;    // 指针回到文件的开头
            for(int i=0;i<b.length;i++){
                b[i] = rdf.readByte() ;    // 读取一个字节
            }
            name = new String(b) ;    // 将读取出来的byte数组变为字符串
            age = rdf.readInt() ;    // 读取数字
            System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
            rdf.skipBytes(12) ;    // 空出第二个人的信息
            for(int i=0;i<b.length;i++){
                b[i] = rdf.readByte() ;    // 读取一个字节
            }
            name = new String(b) ;    // 将读取出来的byte数组变为字符串
            age = rdf.readInt() ;    // 读取数字
            System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
            rdf.close() ;                // 关闭
        }
    };


          3.字节流与字符流
            (1)字节流

    字节流主要操作byte类型数据,以byte数组为主,主要操作类就是OutputStream类和InputStream类。


            2)字符流

    Java提供了Reader和Write两个专门操作字符流的类


            (3)区别

     

    实验报告(七)

    一、实验源码

    package shaopiao;
    
    class Shaopiao implements Runnable{
        private int tickets =1000 ;
    
        @Override
        public void run() {
            while(tickets>0) { 
                synchronized (this) {
                        if (tickets > 0) {                                                                                          
                             
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            tickets--;                                                                                              
                            System.out.println(Thread.currentThread().getName() + "卖出一张票,还剩" + tickets + "张");                    
                        } else {
                            System.out.println("余票不足,暂停出售!");
    
                            try {                                                                                                   
                                Thread.sleep(100000000);                                                                        
                                } catch (InterruptedException e) {                                                                      
                                e.printStackTrace();                                                                                
                                }              
                        }                                                                                     
                }
            }
        }
    }    
    package shaopiao;
    
    public class Test {
    
        public static void main(String[] args) {
            Shaopiao a = new Shaopiao();
    
            int[] b = new int[10];
            for(int i=0;i<10;i++) 
                b[i] = i+1;
            for(int i=0;i<10;i++)
                new Thread (a,b[i]+"号").start();
            }
    }

    二、实验结果

  • 相关阅读:
    csp2020游记
    agc006_f Blackout
    CF1368G Shifting Dominoes
    AtCoder Grand Contest 009 简要题解
    Codeforces Round #666 (Div. 1)
    CSP 2019 树的重心
    Luogu-P4859 已经没什么好害怕的了
    2020.9.17 校内测试
    CF379F New Year Tree
    图论(小结论)
  • 原文地址:https://www.cnblogs.com/xu23/p/11732420.html
Copyright © 2011-2022 走看看