1.练习回顾
INut:
public interface INut {
String effect();
}
Walnut:
public class Walnut implements INut{
@Override
public String effect() {
return "吃核桃补脑";
}
}
Almond:
public class Almond implements INut{
@Override
public String effect() {
return "吃杏仁止咳润肺";
}
}
ITool:
public interface ITool {
void knock(INut nut);
}
Hammer:
public class Hammer implements ITool{
@Override
public void knock(INut nut) {
System.out.println("用锤子敲开坚果,"+nut.effect());
}
}
Stone:
public class Stone implements ITool{
@Override
public void knock(INut nut) {
System.out.println("用石头敲开坚果,"+nut.effect());
}
}
Person:
public class Person {
private ITool iTool;
public void eat(INut nut){
iTool.knock(nut);
}
public void setiTool(ITool iTool) {
this.iTool = iTool;
}
}
Test:
public class Test {
public static void main(String[] args) {
Person p = new Person();
Walnut hetao = new Walnut();
Almond xingren = new Almond();
ITool t1 = new Stone();
ITool t2 = new Hammer();
p.setiTool(t1);
p.eat(hetao);
p.eat(xingren);
p.setiTool(t2);
p.eat(hetao);
p.eat(xingren);
}
}
2.文件对象的使用
File:文件对象,用于表示磁盘上的文件夹或数据文件。
方法或常量 | 类型 | 描述 |
public File(String filename) | 构造方法 | 创建File类对象并传入完整路径 |
public boolean createNewFile()
| 方法 | 创建新文件 |
public boolean delete()
| 方法 | 删除文件 |
public boolean exists() | 方法 | 判断文件是否存在 |
public boolean isDirectory() | 方法 | 判断给定的路径是否为目录 |
public long length() | 方法 | 返回文件的大小 |
public String[ ] list() | 方法 | 列出指定目录的全部内容,只列出名字 |
public File[ ] listFiles() | 方法 | 列出指定目录的全部File对象 |
public boolean mkdirs() | 方法 | 创建目录 |
public boolean renameTo(File dest) | 方法 | 为已有的文件重命名 |
2.1文件的基本操作
public class Test {
public static void main(String[] args) throws IOException {
//文件对象:数据文件,目录文件
//File file0 = new File("E:/Desktop/mu.txt");
//File.separator:路径分隔符 (根据操作系统改变)
File file0 = new File("E:"+File.separator+"Desktop"+File.separator+"mu.txt");
//判断文件是否存在
if(!file0.exists()){
//在该目录下创建文件,如果目录不正确会报错(IOException: 系统找不到指定的路径。)
file0.createNewFile();
}else{
//删除文件
//file0.delete();
}
//文件大小,
System.out.println(file0.length());
//是否为目录文件
System.out.println(file0.isDirectory());
//是否是数据文件
System.out.println(file0.isFile());
//文件名
System.out.println(file0.getName());
//文件路径
System.out.println(file0.getPath());
//文件属性:是否 可读、可写、可执行
System.out.println(file0.canRead());
System.out.println(file0.canWrite());
System.out.println(file0.canExecute());
}
}
public class Test2 {
public static void main(String[] args) throws IOException {
File f = new File("e:/qqq/iii/ppp");
File f2 = new File("e:/qqq/iii/ppp/xxx.txt");
if(!f.exists()){
//创建多级目录
f.mkdirs();
//创建文件
f2.createNewFile();
}else {
//删除文件
f2.delete();
f.delete();
}
}
}
2.3 文件的遍历/递归遍历
public class Test1 {
public static void traverseFile(File file,int n){
for (int i=0;i<n;i++){
System.out.print(" |- ");
}
if(!file.isDirectory()){
n=0;
System.out.println(file.getName()+" ");
}else{
n++;
System.out.println(file.getName()+"<DIR>");
String[] names = file.list();
for (String f : names){
File file1 = new File(file.getPath()+File.separator+f);
traverseFile(file1,n);
}
}
}
public static void main(String[] args) {
File file = new File("E:/Desktop/iotest");
traverseFile(file,0);
}
}
3.IO数据流的使用
流 : 水流(有方向,有基本的构成单位:水滴),车流(有方向,基本单位:车);数据流 :以字节或字符为单位按特定的方向传送就构成了数据流。
3.1 流的分类
3.2 输入输出字节流的使用
3.2.1 输入字节流
抽象类:InputStream 程序可以从目标中连续读取字节的对象称为字节输入流实现类:FileInputStream
方法 | 描述 |
public void close() | 关闭输入流 |
public abstract int read() | 以数字的方式读取内容 |
public int read(byte[ ] b) | 将内容读到byte数组中,同时返回读入的个数 |
3.2.2 输出字节流
抽象类:OutputStream 程序可以向其中连续写入字节的对象称为字节输出流实现类:FileOutputStream
方法 | 描述 |
public void close() | 关闭输出流 |
public abstract void write(int b)
|
在数据流中写入一个字节
|
public void write(byte[] b,int off,int len)
|
在数据流中写入一个指定范围的byte组
|
public void write(byte[] b)
|
在数据流中写入一个byte数组
|
public void flush()
|
刷新缓冲区
|
3.2.3 流的使用步骤
public class Test {
//将程序中(内存)的数据写到文件中
public static void w() throws IOException {
//定义文件对象,关联到一个磁盘文件
File file =new File("d:/yzh7.txt");
//创建文件字节输出流对象:可以配置一个追加方式的boolean值
OutputStream os = new FileOutputStream(file,true);
//通过文件输出流对象,写数据到文件中
String s = "abcdef";
os.write(s.getBytes());
//关闭流对象
os.close();
}
//将文件中的数据读取到程序中(内存)
public static void r() throws IOException {
//创建文件对象,关联一个磁盘文件
File file = new File("d:/yzh7.txt");
//创建文件输入字节流对象
//InputStream is = new FileInputStream("d:/yzh7.txt");
InputStream is = new FileInputStream(file);
//通过输入流对象,读取文件内容
//定义字节数组,用于存储读入的内容
byte[] bs = new byte[10];
//读取数据,并返回读取个数。如果读取不到数据时,会返回-1
int count = is.read(bs);
System.out.println("读取的数据长度:"+count);
//读取的内容
/*for (byte b : bs){
System.out.println(b);
}*/
//将读取的内容构建成字符串
String s = new String(bs,0,count);
System.out.println(s);
//关闭流对象
is.close();
}
public static void main(String[] args) throws IOException {
//调用写文件的方法
w();
//r();
}
}
public class Test2 {
public static void main(String[] args) {
//String s = "abcdef";
//通过字符串获取字符串中字符对应的字节数组
/*byte[] bs = s.getBytes();
for (byte b : bs){
System.out.println(b);
}*/
//将字节数组,转为字符串
byte[] bs = {101,102,103,104,105,106};
//将字节数组中,从指定位置开始,指定长度的内容,转为字符串
String str = new String(bs,2,2);
System.out.println(str);
}
}