* 流 (以字节为单位 进行数据的传输)
* 以参照物(你的程序)来衡量 是输出 还是输入
* 字节输出流 程序-->文件
* OutPutStream
* 字节输入流 文件--程序
* InPutStreanm
* 以上两个抽象类是所有字节流的父类
FileWriter 字符输出流
FilieReader 字符输入流
上面两个类是 所有字符流的父类(抽象类)
在io流中出现的异常都是IoException异常
// 创建文件字节输出流
File file = new File("/Users/lanou/Desktop/Test/jsy.txt");
// 给出的路径可以没有该文件,没有这个文件系统会帮你创建这个文件
FileOutputStream fos = new FileOutputStream(file);
// 写文件时 出现的异常都是Io异常
// 传入int值得方法 是按ASCII码输入 一次写入一个字节
fos.write(58);
// 创建一个字节数组
byte[] b = { 66, 34, 78, 12 };
fos.write(b, 1, 2);
// 直接写字符串
// 字符串转字节数组 getByTes();
fos.write("wanglong".getBytes());
// 关闭资源
fos.close();
如何对文件在不删除原有内容的情况下进行续写:在输出流的参数中,第二个参数填true
FileOutputStream fos = new FileOutputStream(file,true);
读取文件:
read();可以读取文件中的内容 并且返回读取到的字节数或者字符数 没读到字符就会返回-1
常用while循环 读取一个文件中的内容
// 循环
int num = 0;
while ((num = fis.read()) != -1) {
System.out.println((char) num);
复制文件并修改文件后缀
public class Demo03 {
public static void main(String[] args) throws IOException {
// 将一个文件夹下的所有txt文件 复制 到另一个文件夹下并且保存为.java文件
File src = new File("/Users/lanou/Desktop/Test");
File dest = new File("/Users/lanou/Desktop/copy");
copyTxtTOJava(src, dest);
}
public static void copyTxtTOJava(File src, File dest) throws IOException {
File[] files = src.listFiles(new Gl());
for (File subFile : files) {
if (subFile.isFile()) {
//读写
int len = -1;
byte[] bts = new byte[1024];
FileInputStream fis = new FileInputStream(subFile);
//构建写的路径
String replaceFirst = subFile.getName().replaceFirst("txt", "java");
File tempfile = new File(dest, replaceFirst);
FileOutputStream fos = new FileOutputStream(tempfile);
//写入目标文件
while ((len = fis.read(bts)) != -1) {
fos.write(bts, 0, len);
}
} else {
copyTxtTOJava(subFile, dest);
}
}
}
}
class Gl implements FileFilter {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return true;
}
if (pathname.getName().endsWith(".txt")) {
return true;
}
return false;
}
}