文件:存储数据的媒介 文件夹:目录 流: 从流向分:I/O 输入流(Input):读数据 输出流(Output):写数据 按阻塞方式: BIO(阻塞流) NIO(伪异步非阻塞流,分布式用) AIO(异步非阻塞流) 异步:多个同时执行,相互之间无关。 同步:一个一个执行。 按读取方式分: 字节流 字符流 字节输入流 字节输出流 字符输入流 字符输出流 缓冲流 缓冲型字节输入流 BufferedInputStream 缓冲型字节输出流 BufferedOutputStream 缓冲型字符输入流 BufferedReader 缓冲型字符输出流 BufferedWriter
管道流 PipedWriter
1、文件:
package com.fyb.oop.week3.liu.wenjian;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Test {
public static void main(String args[]) throws IOException{
/*forFiles("D:\\新建文件夹\\培训\\教材");*/
File file = new File("D:\\新建文件夹\\培训\\HelloKitty.class");//正斜杠(/)可以写一个,反斜杠(\)必须写俩
File file2 = new File("D:/新建文件夹/培训/HelloKitty.java");
System.out.println(file.canRead());//查找文件是否存在
System.out.println(file.getName());//查看文件名
System.out.println(file.canRead());//是否可读
System.out.println(file.canWrite());//是否可写
// System.out.println(file.createNewFile());//创建新文件
// file.delete();
System.out.println(file.compareTo(file2));//从不同的那一位比较,c-j=-7
System.out.println(file.hashCode());//hashCode地址
System.out.println(file.length());//字节数长度
System.out.println(file.toString());//打印路径完整名称
System.out.println(file.canExecute());//能否执行
// file.deleteOnExit();//删除
// Thread.sleep(5000);//休眠5秒
System.out.println(file.equals(file2));//比较是否相等,相等则重写了equals
System.out.println(file.getAbsolutePath());//获取绝对路径
System.out.println(file.getAbsoluteFile());//获取绝对文件
System.out.println(file.getCanonicalPath());//获取规范路径
System.out.println(file.getCanonicalFile());//获取规范文件
System.out.println(file.getFreeSpace());//获取剩余空间
System.out.println(file.getParent());//获取上层
System.out.println(file.getParentFile().isFile());//获取上层是否是文件
System.out.println(file.getPath());//获取绝对路径
System.out.println(file.isAbsolute());//是否是绝对的
System.out.println(file.isHidden());//是否隐藏
System.out.println(file.lastModified());//最后修改时间;以long类型,单位为毫秒,从1970年0点0秒开始计算
File file1 = new File("D:\\新建文件夹\\培训");
String[] files=file1.list();//获取file1子文件
for (String s : files) {
System.out.println(s);
}
File[] files = new FileFilter[];//数组形式
for (File file1 : files) {
System.out.println(file1);
}
file.mkdirs();//创建文件夹
}
}
2、字节流:
//向文件中写数据
File file = new File("D:\\新建文件夹\\培训\\data.txt");
if(!file.exists()){//如果不存在
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write("sfdgf".getBytes("utf-8"));//写入,字符串转为字节码,utf-8编码,一个字符占3个字节;jbk编码,一个字符占2个字节
fos.flush();//冲刷,清空缓存
fos.close();//释放资源
//从文件中读取数据
File file = new File("D:\\新建文件夹\\培训\\data.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bs = new byte[1024];
int i = fis.read(bs);
String s = "";
while (i>0){
s += new String(bs,0,i);
i = fis.read(bs);
}
// String s = new String(bs,0,i);
System.out.println(s);
fis.close();//释放资源
加密:
File file1 = new File("D:\\新建文件夹\\培训\\data1.txt");
if(!file1.exists()){//如果不存在
file1.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file1);
//加密:交换字节码最后两位;解密:换回去
File file = new File("D:\\新建文件夹\\培训\\data.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bs = new byte[1024];
int i = fis.read(bs);
String s = "";
while (i>0){
byte temp = bs[0];
bs[0] = bs[i-1];
bs[i-1] = temp;
fos.write(bs,0,i);
i = fis.read(bs);
}
fos.flush();
fos.close();
fis.close();
file.delete();
3、字符流:
//字符流:从文件中读取数据
FileReader fr = new FileReader("D:\\新建文件夹\\培训\\data.txt");
char[] buf = new char[1024];
int i = fr.read(buf);
String s = "";
while(i>0){
s+=new String(buf,0,i);
i = fr.read(buf);
}
System.out.println(s);
fr.close();
//字符流:向文件中写数据
FileWriter fw = new FileWriter("D:\\新建文件夹\\培训\\data.txt",true);//append:是否追加
fw.write("阿斯顿飞过");
fw.flush();//冲刷,清空缓存
fw.close();
4、网络编程
/*Socket socket = new Socket("192.168.1.101",8888);
OutputStream os = socket.getOutputStream();//获取一个输出流
FileInputStream fis = new FileInputStream("D:\\新建文件夹\\培训\\课堂视频");
byte[] buf = new byte[1024];
int i = fis.read(buf);
while(i>0){
os.write(buf,0,i);
i = fis.read(buf);
}
os.flush();
fis.close();*/
ServerSocket socket = new ServerSocket(8888);
Socket soc = socket.accept();
InputStream is = soc.getInputStream();
FileOutputStream fos = new FileOutputStream("D:\\新建文件夹\\培训\\课堂视频");
byte[] bytes = new byte[1024];
int i = is.read(bytes);
while(i>0){
fos.write(bytes,0,i);
i = is.read(bytes);
}
fos.flush();
fos.close();