File类将
文件
或文件夹
封装成对象 IO流+File
File file = new File(String path);
File file = new File(String dir,String fineName);
File file = new File(File dir,String fineName);
public class FileDemo {
public static String path = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File.txt";
public static String dirPath = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File";
public static String dirPaths = "I:\\Java\\Base\\Thinking\\src\\IOTest\\a\\b\\c";
public static File file = new File(path);
public static File newDir = new File(dirPath);
public static File newDirs = new File(dirPaths);
public static void main(String[] args) throws Exception {
// otherTest();//其他测试
// createTest();//创建文件
// judgeTest();//判断File文件
// getInfoTest();//获取File对象信息
// deleteTest();//删除文件
}
String path = "I:\\Java\\Base\\Thinking\\src\\IOTest\\File.txt";
File file = new File(path);
System.out.println(file);//file.toString()返回文件路径
//I:\Java\Base\Thinking\src\IOTest\File.txt
System.out.println(File.separator);//系统路径分隔符:\
file.renameTo(new File(file.getParent(), "file.txt"));//重命名到(剪切)
private static void createTest() throws IOException {
//返回是否创建成功,如果已经存在,返回false
System.out.println("创建文件: " + file.createNewFile());//创建文件: true
System.out.println("创建一级文件夹: " + newDir.mkdir());//创建一级文件夹: true
System.out.println("创建多级文件夹: " + newDirs.mkdirs());//创建多级文件夹: true
}
private static void judgeTest() {
System.out.println("文件是否存在" + file.exists());//文件是否存在true
System.out.println("文件是否可执行: " + file.canExecute());//文件是否可执行: true
System.out.println("文件是否可读: " + file.canRead());//文件是否可执行: true
System.out.println("文件是否可写: " + file.canWrite());//文件是否可执行: true
System.out.println("是否是文件: " + file.isFile());//是否是文件: true
System.out.println("是否是文件夹: " + file.isDirectory());//是否是文件夹: false
System.out.println("是否是绝对路径: " + file.isAbsolute());//是否是绝对路径: true
System.out.println("是否是隐藏: " + file.isHidden());//是否是隐藏: false
}
private static void getInfoTest() {
System.out.println("路径: " + file.getPath());
//路径: I:\Java\Base\Thinking\src\IOTest\File.txt
System.out.println("绝对路径: " + file.getAbsolutePath());
//绝对路径: I:\Java\Base\Thinking\src\IOTest\File.txt
System.out.println("文件名: " + file.getName());//文件名: File.txt
System.out.println("文件名: " + newDir.getName());//文件名: File
System.out.println("父文件夹名: " + file.getParent());
//父文件夹名: I:\Java\Base\Thinking\src\IOTest
System.out.println("父文件夹对象: " + file.getParentFile());
//父文件夹对象: I:\Java\Base\Thinking\src\IOTest
System.out.println("文件所在盘符总大小: " + file.getTotalSpace() / 1024 / 1024 / 1024 + "G");//50G
System.out.println("文件所在盘符剩余大小: " + file.getUsableSpace() / 1024 / 1024 / 1024 + "G");//20G
System.out.println("文件所大小:" + file.length()+"b");//文件所大小:5b
String time = new SimpleDateFormat("yyyy/MM/dd a hh:mm:ss ").format(file.lastModified());
System.out.println("最后修改日期: " + time);
//最后修改日期: 2018/10/10 下午 01:10:17
}
private static void deleteTest() {
System.out.println("删除文件: " + file.delete());//删除文件: true
file.deleteOnExit();//虚拟机退出时删除,避免删除临时文件前发生异常后删除不了
}
private static void listFile() {
File[] files = File.listRoots();//显示系统盘符
for (File f : files) {
System.out.print(f+" ");
//C:\ D:\ E:\ F:\ G:\ H:\ I:\ J:\ K:\
}
String[] list = file.getParentFile().list();
for (String s : list) {
System.out.println(s);
}
//a
//Activity.md
//BufferedWriter.txt
//fate.jpg
//File
//file.txt
//FileInputStream.txt
//FileWriter.txt
//video.avi
//《吸血鬼日记》原著英文.txt
//键盘录入
//键盘录入-GKB
//键盘录入-UTF-8
File[] listFiles = file.getParentFile().listFiles(new FilenameFilter()
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");//过滤掉.txt以外的文件
}
});
for (File lf : listFiles) {
System.out.println(lf);
//I:\Java\Base\Thinking\src\IOTest\BufferedWriter.txt
//I:\Java\Base\Thinking\src\IOTest\file.txt
//I:\Java\Base\Thinking\src\IOTest\FileInputStream.txt
//I:\Java\Base\Thinking\src\IOTest\FileWriter.txt
//I:\Java\Base\Thinking\src\IOTest\《吸血鬼日记》原著英文.txt
}
}
删除文件夹,如果里面有内容,从里往外删 不能直接删除有文件的文件夹
private static void deleteDir(File dir) {
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
deleteDir(file);
} else {
String name = file.getName();
boolean ok = file.delete();
System.out.println(ok ? "成功删除--" + name : "删除失败--" + name);
}
}
dir.delete();
}
public class OpenDir {
public static void main(String[] args) {
File file = new File("E:\\UI");
List<File> list = new ArrayList<>();
fileToList(file, list);
System.out.println(list.size());
write2File(list, "F:\\list.txt");
}
/**
* 将某文件夹的图片文件加入list中
* @param dir 目标文件夹
* @param list 列表
*/
private static void fileToList(File dir, List<File> list) {
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
fileToList(file, list);
} else {
if (file.getName().endsWith(".png")||file.getName().endsWith(".jpg")) {
list.add(file);
}
}
}
}
/**
* 将文件列表每项的路径保存到目标文件
* @param list
* @param target
*/
public static void write2File(List<File> list, String target) {
BufferedWriter bfw = null;
try {
bfw = new BufferedWriter(new FileWriter(target));
for (File file : list) {
String path = file.getAbsolutePath();
bfw.write(path);
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bfw != null) {
bfw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
60000+图片的路径保存到了文件中
保存文件列表.png
File对象差不多就这些
HashTable的子类,具有Map的特点,并且键值均为
String
Map与IO结合,可用于键值对形式的配置文件,如下面的颜色选择器
配置文件.png
既然是继承自HashTable,基本操作应该不在话下,Map中常用put(),get() 为了语义化,Properties类有setProperty()和getProperty()---当然你也可以用put(),get()
public class PropertiesTest {
public static void main(String[] args) {
Properties prop = new Properties();
prop.put("TextColor", "red");
prop.put("FontSize", "25sp");
System.out.println(prop);//{FontSize=25sp, TextColor=red}
System.out.println(prop.getProperty("TextColor"));//red
}
}
//获取键的集合
Set<String> keys = prop.stringPropertyNames();
for (String key : keys) {
System.out.print(key+":"+prop.getProperty(key)+" ");
//FontSize:25sp Family:KaiTi TextColor:red
}
//使用map的api遍历:
prop.keySet().iterator().forEachRemaining(key->{
System.out.print(key+":"+prop.get(key)+" ");
//FontSize:25sp Family:KaiTi TextColor:red
});
config.png
没有Properties
对象:啰嗦一大堆打开颜色选择器 :读流I-->字符串分割-->字符串存入Map-->使用Map对象还原用户配置 修改配置时 :写流O-->创建Map对象-->字符串拼接-->字符串存入配置文件
private static void useHashMapReadConfig() throws IOException {
//将配置文件读入hashMap对象
String configPath = "I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini";
BufferedReader bfr = new BufferedReader(new FileReader(configPath));
HashMap<String, String> hashMap = new HashMap<>();
String line = null;
while ((line = bfr.readLine()) != null) {
String[] split = line.split("=");
hashMap.put(split[0], split[1]);
}
bfr.close();
System.out.println(hashMap);
//{FontSize=25sp, Family=KaiTi, TextColor=red}
}
打开颜色选择器:读流I-->使用Properties对象还原用户配置 关闭颜色选择器:写流O-->使用Properties对象修改配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini"));
System.out.println(prop);//{FontSize=25sp, Family=KaiTi, TextColor=red}
prop.list(System.out);
//-- listing properties --
//FontSize=25sp
//Family=KaiTi
//TextColor=red
prop.setProperty("TextColor", "blue");
//修改后需要用store保存到文件中,否则修改无效
prop.store(new FileOutputStream("I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini"),"toly--mod");
修改config.png
项目源码 | 日期 | 备注 |
---|---|---|
V0.1--无 | 2018-10-11 | Java总结IO篇之File类和Properties类 |
V0.2--无 | - | - |
笔名 | 微信 | 爱好 | |
---|---|---|---|
张风捷特烈 | 1981462002 | zdl1994328 | 语言 |
我的github | 我的简书 | 我的CSDN | 个人网站 |
1----本文由张风捷特烈原创,转载请注明 2----欢迎广大编程爱好者共同交流 3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4----看到这里,我在此感谢你的喜欢与支持