第九周课程总结 & 实验报告(七)

 

第九周课程总结

一、多线程
    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();
        }
}

 

 

二、实验结果

 

posted @ 2019-10-24 15:58  林衍  阅读(285)  评论(1编辑  收藏  举报