第九周课程总结
一、多线程 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(); } }
二、实验结果