Java学习笔记(1)--File类、RandomAccessFile类

今天学习了Java.io中的两个类——

1.File类

4种构造方法:

File(File parent, String child)
File(String pathname)
File(String parent, String child)
File(URI uri)

主要的方法:

createNewFile()
mkdir()
mkdirs()
delete()
getAbsoluteFile() 绝对路径
getAbsolutePath()
getCononicalFile() 抽象路径
getCononicalPath()
getName()
getParent()
getParentFile()
getPath()
isDirectory()
isFile()
length()
list()  返回一个字符串数组,指定此抽象路径名表示的目录中的文件和目录。
listFiles()
toString()  返回此抽象路径名的路径名字符串。


例子1:

import java.io.File;
import java.io.IOException;

public class FileDemo {
<span style="white-space:pre">	</span>public static void main(String[] args) {
		File file = new File("E:\\Fraps\\cc");  //了解构造函数的情况,查帮助alt+/
		System.out.println(file.exists());  //查看目录存不存在
		if ( ! file.exists()) //创建和删除目录
			file.mkdir(); //file.mkdirs()创建多级目录
		else
			file.delete();
		//是否是一个目录
		System.out.println(file.isDirectory());
		//是否是一个文件
		System.out.println(file.isFile());
		
		File file2 = new File("E:\\Fraps\\cc.txt"); 
		//File file2 = new File("E:\\Fraps", "cc.txt");  //第二种构造函数
		if ( ! file2.exists())
			try {
				file2.createNewFile();  //创建一个文件
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		else
			file2.delete();
	
		//常用的File对象的API
		System.out.println(file); //file.toString()的内容
		System.out.println(file.getAbsolutePath()); //同上
		System.out.println(file.getName()); 
		System.out.println(file.getParent()); //父目录
		System.out.println(file.getParentFile());
		System.out.println(file.getParentFile().getAbsolutePath());	
	}
}


例子2

import java.io.File;
import java.io.IOException;

public class FileDemo2 {
	public static void listDirectory(File dir) throws IOException{
		//列出指定目录下(包括其子目录)的所有文件
		if (! dir.exists()){
			throw new IllegalArgumentException("目录:" + dir + "不存在");
		}
		if (! dir.isDirectory()){
			throw new IllegalArgumentException(dir + "不是目录");
		}
		
		//返回的是字符串数组,直接子的名称,不包含子目录内的文件
		/*String[] filenames = dir.list();  //创建dir.list()实例类型
		//foreach
		for (String string : filenames) {  
			System.out.println(dir + "\\" + string);
		}*/
		
		//如果要遍历子目录下的内容就需要构造成File对象做递归操作
		File[] files = dir.listFiles(); //返回的是直接子目录(文件)的抽象
		if (files != null && files.length > 0){
		    for (File file : files) {
		    	if (file.isDirectory()){
		    		//递归
		    		listDirectory(file);
		    	}else{
		    	System.out.println(file);
		    	}
		    }
		}
	}
	public static void main(String[] args) throws IOException {
		FileDemo2.listDirectory (new File("E:\\Fraps"));
	}
}


2.RandomAccessFile类

2种构造方法:

RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)

常用方法:
close()
getFilePointer()
length()
read()
read(byte[] b) 
readLine()
seek() 设置指针位置
write()
writeInt()

例子:

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

public class RafDemo {

	public static void main(String[] args) throws IOException {
		File demo = new File("demo");
		if ( ! demo.exists())
			demo.mkdir();
		File file = new File(demo, "raf.dat"); //demo是父目录
		if ( ! file.exists())
			file.createNewFile();

		RandomAccessFile raf = new RandomAccessFile(file, "rw");
		//指针的位置
		System.out.println(raf.getFilePointer());
		
		raf.write('A'); //只写了一个字节(后8位)
		System.out.println(raf.getFilePointer());
		
		raf.write('B');
		System.out.println(raf.getFilePointer());
		
		int i = 0x7ffffff;
		//用write方法每次只能写一个字节,如果要把i写进去就得写4次
		raf.write(i>>>24); //高8位
		raf.write(i>>>16);
		raf.write(i>>>8);
		raf.write(i);
		System.out.println(raf.getFilePointer());
		
		//可以直接这么写
		raf.writeInt(i); //选中按F3键可以查看底层源码
		
		String s = "中";
		byte[] gbk = s.getBytes("gbk");
		raf.write(gbk);
		System.out.println(raf.length());
		
		//读文件,必须把指针移到头部
		raf.seek(0);
		//一次性读取
		byte[] buf = new byte[(int)raf.length()];
		raf.read(buf); //读入到字节数组buf中,无参数则读取一个字节
		System.out.println(Arrays.toString(buf));
		
		//以字符串形式输出
		String s1 = new String(buf, "gbk");
		System.out.println(s1);
		
		//以十六进制的形式输出
		for (byte b : buf) {
			System.out.println(Integer.toHexString(b & 0xff)+" ");
			
		raf.close();
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值