Java总结IO篇之File类和Properties类

mac2022-06-30  116

上篇:File类

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();//删除文件 }
1.其他测试
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"));//重命名到(剪切)
2.创建文件
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 }
3.判断File文件
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 }
4.获取File对象信息
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 }
5.删除文件
private static void deleteTest() { System.out.println("删除文件: " + file.delete());//删除文件: true file.deleteOnExit();//虚拟机退出时删除,避免删除临时文件前发生异常后删除不了 }

二、文件列表

1.基本使用
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 } }
2.删除一个文件夹内的所有文件

删除文件夹,如果里面有内容,从里往外删 不能直接删除有文件的文件夹

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(); }
3.将某文件加图片的路径保存到目标文件
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对象差不多就这些


下篇:Properties类

HashTable的子类,具有Map的特点,并且键值均为String Map与IO结合,可用于键值对形式的配置文件,如下面的颜色选择器

配置文件.png

一、Properties对象的简单使用

既然是继承自HashTable,基本操作应该不在话下,Map中常用put(),get() 为了语义化,Properties类有setProperty()和getProperty()---当然你也可以用put(),get()

1.存储与获取
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 } }
2.遍历
//获取键的集合 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 });

Properties与文件IO结合

config.png
1.如果没有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} }
使用Properties对象:两行搞定

打开颜色选择器:读流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}
list方法:可以指定输出流
prop.list(System.out); //-- listing properties -- //FontSize=25sp //Family=KaiTi //TextColor=red
3.修改配置文件并保存
prop.setProperty("TextColor", "blue"); //修改后需要用store保存到文件中,否则修改无效 prop.store(new FileOutputStream("I:\\Java\\Base\\Thinking\\src\\IOTest\\TxtInfo.ini"),"toly--mod"); 修改config.png

后记:捷文规范

1.本文成长记录及勘误表
项目源码日期备注V0.1--无2018-10-11Java总结IO篇之File类和Properties类V0.2--无--
2.更多关于我
笔名QQ微信爱好张风捷特烈1981462002zdl1994328语言我的github我的简书我的个人网站
3.声明

1----本文由张风捷特烈原创,转载请注明 2----欢迎广大编程爱好者共同交流 3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4----看到这里,我在此感谢你的喜欢与支持

转载于:https://www.cnblogs.com/toly-top/p/9781848.html

最新回复(0)