给定一个路径 , 要获取该路径里面的 所有文件 及 文件夹
/**
* 使用File类 及内部方法
*
* 给定一个路径 , 要获取该路径里面的 所有文件 及 文件夹
*
*/
public class FileDemo {
/**
* 实现思路:
* 1. 创建 File对象 ,关联给定的路径
* 2. 可以获取该路径下的 文件数组
* 判断如果是1个文件 ,直接打印该文件名
* 如果是一个路径, 递归 调用(自己调用自己)
*
*
* API 指的是 类 方法 字段
*
* 更新需求:
* 如果 文件后缀是 .java结尾 ,那么打印.Java文件
* @param args
*/
public static void main(String[] args) {
String path = "C:\\"; //路径
File srcFile = new File(path); //源文件
show(srcFile);
}
private static void show(File srcFile) {
File[] files = srcFile.listFiles();
//遍历目录下所有文件 或文件夹
for(File file:files){
if(file.isFile()){
//System.out.println(file.getAbsolutePath()); //拿到该文件绝对路径
if(file.getName().endsWith(".java")){
System.out.println(file.getAbsolutePath());
}
}
if(file.isDirectory()){ //如果它本来就是目录
// System.out.println(file.getAbsolutePath());
show(file);
}
}
}
}
字节流
这里示例的是一个照片的上传
public class UploadFile {
public static void main(String[] args) throws Exception {
//图片的路径
File srcFile=new File("C:\\Users\\76178\\Pictures\\Saved Pictures");
//上传后的路径
String path = "C:\\upload\\";
File uploadFile=new File(path);
if(!uploadFile.exists()){//判断如果没有该目录
uploadFile.mkdir();//创建 目录
}
File[] files = srcFile.listFiles();
for (File file:files){ //循环 所有图片 file 是单独1张图
//获得输入和输入流
InputStream is=new FileInputStream(file);
//目标路径 (为解决 文件重名覆盖问题 ,可以使用UUID 或者 时间戳 (毫秒值))
String distPath=path+System.currentTimeMillis()+file.getName();
OutputStream os=new FileOutputStream(distPath);
//读写的具体实现
byte[] b=new byte[1024];
int len=0; //每次读取的长度 , 如果读取到文件末尾 该值等于-1代表结束
while ((len=is.read(b))!=-1){
os.write(b,0,len);
}
//关闭流
os.close();
is.close();
}
}
}
字符流
/**
* 字符流
*/
public class CharacterDemo {
public static void main(String[] args) throws Exception {
//创建 字符流 读和写的对象 , 读取 d盘 aaa.txt内容 ,通过 写的对象 再拷贝1份到 d盘
//Reader reader=new BufferedReader(new FileReader("D:\\aaa.txt"));方式一
BufferedReader reader=new BufferedReader(new FileReader("D:\\aaa.txt"));
// Reader reader = new BufferedReader(new FileReader(new File("c:\\a.txt")));
//Writer writer=new BufferedWriter(new FileWriter("D:\\bbb.txt"));方式一
BufferedWriter writer=new BufferedWriter(new FileWriter("D:\\bbb.txt"));
//读取文本有2种方式 ,方式1: 按照字符读取 ,方式2:每次读取1行
/*
1.按照字符读取 Reader
可以复制出换行
char[] c=new char[20];
int len=0;
while ((len=reader.read(c))!=-1){
writer.write(c,0,len);
}
*/
/*
2:每次读取1行
每次读取1行 BufferedReader
*/
String line;
int a=1;//给每一行前面加个行数
while ((line=reader.readLine())!=null){//.readLine()为BufferedReader里的属性
writer.write(a+line);
writer.newLine();//换行 .newLine()为BufferedReader里的属性
writer.flush();
a++;
}
//关闭资源
writer.close();
reader.close();
}
}
打印流
public class WriterDemo {
public static void main(String[] args) throws Exception {
//打印流
PrintWriter pw=new PrintWriter("a.txt","UTF-8");//创建当前目录下 每次运行会刷新文档里边的内容
pw.print("打印流测试1");
pw.write("测试完成1");
pw.write("谢谢1");
pw.close();
/*FileWriter fw = new FileWriter("ccc.txt",true);//true表示追加,每次运行会在文档后边继续追加
fw.write("2222测试 fileWriter...");
fw.write("12312312312312312-----");
fw.write("1111测试 fileWriter...");
fw.close();*/
}
}