您的位置:首页 > 运维架构

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

2013-10-08 22:51 281 查看
----------------------
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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: