(21) - 简要知识点(一) (File类,Properties类,基本数据类型的包装类)

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

在视频学习过程中,穿插了一些偏向应用的一些知识点,这里做简单的说明。

1、 File类

File类算是一种IO操作,是文件盒目录路径名的抽象表现形式。用于将指定路径下的文件或文件夹封装成对象,方便对文件和文件夹的操作。

 

File类的一些特点:

(a)File类的对象可以作为参数传递给流对象,稍后有示例。

(b)File 类的实例是不可变的,也就是说,一旦创建,File 对象表示的抽象路径名将永不改变,即一个对象对应一条路径下的文件或文件夹。

(c)相比较下,IO流不能直接操作文件夹,不能操作文件的属性,流基本只能对文件的数据进行操作,而File能操作文件相关的。

 

File类主要要求会用,了解常用方法:

(1)创建:(一般的构造器创建,略)

 //在指定位置创建文件,如果文件存在,则不创建,返回false
     boolean createNewFile();
     //创建文件夹,只能创建一级目录。
     boolean  mkdir();
     //创建多级文件夹(目录)
     boolean  mkdirs();

(2)删除

 //删除文件,并返回判断值,以确认文件是否被删除
boolean  delete()
//在虚拟机退出时删除指定文件,文件未及时清理时可用,如临时文件
void  deleteOnExit()

(3)判断

//文件是否存在
boolean  exists()
//是否是一个标准的文件,是为true,否为false
boolean  isFile()
//是否是文件夹,在使用该方法前,先用exists判断路径下目标是否存在
boolean  isDirectory()
//是否为隐藏文件,一般不访问隐藏文件
boolean  isHidden()
//是否为绝对路径
boolean  isAbsolute()

(4)获取信息

 //获取文件或路径名
String  getName()
//前者获取相对路径,后者获取绝对路径
String  getPath() 与 StringgetAbsolutePath()
//返回的是绝对路径中父的目录,若是相对路径,未写上一级则返回null,若有则返回上一级目录
String  getParent()
//最后一次呗修改的时间
long lastModified()
//文件长度
long lehgth()

常用方法的示例:

import java.io.*;
class FileDemo
{
       public static void main(String[] args)  throws IOException
       {
              fileTest();
              method();
              method2();
       }
      
       public static void fileTest() throws IOException
       {
              //创建文件夹copy
              File dir = new File("copy");
 
              //创建文件夹,若存在则返回false,否则创建
              //但是mkdir只能创建一级目录,用mkdirs可创建多级文件夹
              sop("mkdir:"+dir.mkdir());
             
              //为了跨平台用字段separator代替分隔,这里只替换了一个\\
              File f1 = new File("copy"+File.separator+"a.txt");
             
              //若该文件最终不想要(比如jvm退出时删除创建文件),就调用该方法
              f1.deleteOnExit();
             
              //创建文件
              sop("create:"+f1.createNewFile());
             
              //删除
              //sop("delete:"+f1.delete());
             
              //创建a.txt,但要注意,最后会被重命名为aa.txt
              File f2 = new File("copy\\a.txt");
             
              //文件是否执行了
              sop("execte:"+f2.canExecute());
 
              //文件是否存在
              File f3 = new File("copy\\a.txt");
              sop( "exists:"+f3.exists());
 
              //不存在的文件
              File f4 = new File("copy\\b.txt");
             
              //对于不存在的文件都返回false
              sop("isDir:"+f4.isDirectory());
              sop("isFile:"+f4.isFile());
       }
 
       //路径
       public static void method()
       {
              File f = new File("cpoy\\a.txt");
 
              //封装时是什么路径,输出就是什么
              sop("path:"+f.getPath());
 
              //返回只有绝对路径
              sop("absPath:"+f.getAbsolutePath());
                    
              //返回的是绝对路径中父的目录,若是相对路径,未写上一级则返回null,若有则返回上一级目录
              sop("parent:"+f.getParent());
       }
 
       //重命名
       public static void method2()
       {
              File f1 = new File("copy\\a.txt");
              File f2 = new File("copy\\aa.txt");
 
              sop("重命名:"+f1.renameTo(f2));
       }
       publicstatic void sop(Object obj)
       {
              System.out.println(obj);
       }
}


列出目录列表

一个文件夹可能包含子文件夹或者一些文件,若想列出所有文件名,需依次遍历目录,若有子文件,需进入子文件夹,如此我们可以考虑用循环遍历或者用递归列出。下面是一个利用递归方法列出目录列表。

代码示例:

import java.io.File;
import java.util.ArrayList;
 
public class FileTest {
       public static void main(String[] args) {
              //需遍历目录
              File file = new File("I:\\临时文件");
              //列表存储
              ArrayList<File>lists = new ArrayList<File>();
              //获取目录列表
              getFileList(file,lists);
             
              outList(lists);
       }
       public static void getFileList(File dir, ArrayList<File> list){
              //获取目录下的所有文件或文件夹
              File[] dirs = dir.listFiles();
              for(File file : dirs){
                     //是否为文件夹
                     if(file.isDirectory()){
                            //用递归进一层遍历
                            getFileList(file,list);
                     }
                     else
                     {
                            //是文件则存进列表集合中
                            list.add(file);
                     }
              }
       }
       //输出
       public static void outList(ArrayList<File> lists){
              for(File file : lists){
                     System.out.println(file);
              }
       }
}

目录的删除

删除某个目录,需先保证文件夹是空的,那么就得先遍历所在目录下的所有文件,依次将内部的文件删除,是目录成为一个空目录,最后再删除目录,对于子目录也是如此。删除目录与列出目录列表方法类似,这里也可采用循环或递归,代码与上述列出目录列表示例类似,只是不是个存储过程,无需ArrayList,将getFileList方法中else分支的list.add(file);语句改写成System.out.println("删除文件:"+f.delete());删除语句即可。

 

2、 Properties类

一般是用来操作配置文件的,该配置文件为键=值得格式按行存储的内容。

(1)Properties是HashTable的子类,也就是说它具备map集合的双列值特点,即存储内容为键值对。

(2)该类能通过load方法读取文件流,一般为字节流,那么在JDK1.6版本加入了字符流,通过store方法保存更改信息到文件流中。

(3)在加保存数据时需要有固定的格式即:键 = 值。

具体用法看示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Set;
 
public class PropertiesDemo {
public static void main(String[] args) throwsException {
        //仅在内存中操作
        setAndGet();
        //属性写入文档
        load();
}
//属性将会写入文档,其实类似于字节流的操作
public static void load() throws Exception{
        FileInputStream fis = new FileInputStream("C:\\Users\\zzb520\\Desktop\\a.info");
        FileOutputStream fos = new FileOutputStream("C:\\Users\\zzb520\\Desktop\\a.info");
        Properties prop = new Properties();
        //用load加载字节流,内容读入Properties对象中
        prop.load(fis);
       
        //更改某个键的值,但这一步内容只在内存中得保存进文件中
        prop.setProperty("a","000");
       
        //store为保存更改键值得方法,真正写入到文件中
        prop.store(fos, "zhu shi");
       
        //列表显示
        prop.list(System.out);
}
public static void setAndGet(){
        Properties prop = new Properties();
       
        //设置Properties的对象中的内容
        prop.setProperty("a","1111");
        prop.setProperty("b","2222");
       
        //获取某个键的值
        String value =prop.getProperty("a");
        System.out.println(value);
       
        //获取所有键
        Set<String> keys =prop.stringPropertyNames();
       
        //再输出所有键的值
        for(String key : keys){
               //输出键和值
               System.out.println(key +" ="+prop.getProperty(key));
        }
}
}


3、基本数据类型的对象包装类

对应表:

基本数据类型

对应包装类

byte

Byte

short

Short

int

Integer

long

Long

boolean

Boolean

float

Float

double

Double

char

Character

 

基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换

基本数据类型转成字符串:

       基本数据类型+“”

       基本数据类型.toString(基本数据类型值);

       如:Integer.toString(34);将34整数变成“34”。

 

字符串转成基本数据类型:

       parseInt(str);

       xxxa = Xxx.parseInt(String);

       doubleb = Double.parseDouble(12.13);

       boolanbl = Boolean.parseBoolean(“false”);

      

或利用Integer的构造函数+intValue(),十进制转成其他进制:

       toBinaryString();

       toHexString();

       toOctalString();

 

其他进制转成十进制:

       staticint parseInt(String, int radix);//重载函数

 

至于包装类涉及到的自动拆装箱特性,在JDK1.5新特性篇幅中有阐述,这里不赘述。

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值