文本I/O
1.文件类file
file类用以获取文件和目录属性以及删除和重命名文件的方法:
File(pathname:String) | 为特定路径名创建一个File对象。这里的路径名可以是一个目录也可以是一个文件 |
File(parent:String,child: Stirng) | 为目录parent下的child创建一个File对象。这个child可以是一个文件名也可以是一个子目录 |
File(parent:File,child: Stirng) | 为目录parent下的child创建一个File对象。这个parent是一个File对象,上面的构造方法中,parent是一个字符串 |
exits():boolean | 如果File对象表示的文件或目录名存在则返回true |
canRead():boolean | 如果File对象表示的文件存在且可读则返回true |
canWrite():boolean | 如果File对象表示的文件存在且可写则返回true |
isDirectory():boolean | 如果File对象表示一个目录则返回true |
isFile():boolean | 如果File对象表示一个F文件则返回true |
isAbsolute():boolean | 如果使用一个绝对路径名创建一个File对象则返回true |
isHidden():boolean | 如果File对象中表示的文件被隐藏则返回true。被隐藏的确切含义是:在Windows系统中,可以在文件属性对话框中标记该文件为隐藏的。在Unix系统中,如果文件名以“.”开始则隐藏该文件 |
getAbsolutePath():String | 返回File对象中表示的完整的绝对文件名或目录名 |
getCanonicalPat():String | 除了能删除路劲名中的“."和”..“这样的冗余名,能解析符号链接(在Unix平台上),能将驱动器号转换为标准的大写字母(在Windows系统下),返回的都是跟getAbsolutePath()一样的 |
getName():String | 返回File对象表的完整路径名和文件名的最后一个名字 |
getParent():String | 返回File对象表的完整路径名和文件名的完整父目录 |
getPath():String | 返回File对象表的完整路径名和文件名 |
lastModified():long |
返回文件最后一次修改的时间 |
length():long | 返回文件的大小,如果文件不存在返回0,如果是目录则返回目录大小 |
listFile():File[] | 返回一个File对象下的文件 |
delete():boolean | 删除这个文件。如果删除成功返回true |
renameTo(dest:File):boolean | 重命名这个文件,操作成功返回true |
· 在Windows中目录的分隔符是反斜杠(\)。但是在java中,反斜杠是一个特殊字符,应该写成\\。或者斜杠(/),/是java的目录分割符,与Unix系统一样。
· 构建一个File实例并不会在机器上创建一个文件。不过文件是否存在,都可以创建任意文件名的File实例。可以调用exits()方法来判断这个文件是否存在。
new File("image/us.gif); //可以在Windows、Unix或其他任意的系统上运行。
2. 文件读入和输出
2.1 使用PrintWrite写数据
java.io.PrintWriter类用来创建一个文件并向文本文件写入数据。
创建一个PrintWriter对象:PrintWriter output = new PrintWriter(filename);
然后,可以调用PrintWriter对象上的print、println和printf方法像文件写入数据。
PrintWriter(file:File) --为特定的文件对象创建一个PrintWriter对象。
PrintWriter(filename:String) --为特定的文件名字符串创建一个PrintWriter对象。
print(s: String):void --向文件写入一个字符串
print(c:char):void --向文件写入一个字符
print(cArray:char[]):void --向文件写入一个字符数组
print(i:int):void --向文件写入一个int数值
print(i:long):void --向文件写入一个long数值
print(f:float):void --向文件写入一个float数值
print(d:double):void --向文件写入一个double数值
print(b:boolean):void --向文件写入一个boolean数值
· println方法除了可以打印一个分隔符之外,其他都跟print方法一样。
· 如果文件不存在,调用PrintWriter的构造方法会创建一个新文件。如果文件存在,那么文件的当前内容会被废弃。
· 调用PrintWriter的构造方法可能会抛出某种I/O异常,java强制要求编写代码来处理这类异常。
· 向文件中写入文本之后,应该使用close()方法关闭文件
1 package demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 文本输入测试 7 * Created by luts on 2015/12/2. 8 */ 9 public class test { 10 public static void main(String[] args) throws Exception{ 11 java.io.File file = new java.io.File("scores.txt"); //创建File对象 12 if (file.exists()){ 13 System.out.println("File already exits"); 14 System.exit(0); 15 } 16 17 //新建一个文档 18 java.io.PrintWriter output = new java.io.PrintWriter(file); 19 20 output.print("Joke: "); 21 output.println(90); 22 output.print("Lucy: "); 23 output.println(80); 24 25 //关闭文件 26 output.close(); 27 } 28 }
2.2 使用Scanner读数据
Scanner input = new Scanner(System.in); //从控制台读取字符串或者基本数据类型
Scanner input = new Scanner(new File(filename)); //从文件中读取字符串或者基本数据类型
Scanner的常用方法:
Scanner(source:File) --创建一个所产生的值都是从特定文件扫描而来的扫描器
Scanner(source:String) --创建一个所产生的值都是特定字符串扫描而来的扫描器
close() --关闭这个扫描器
hasNext():boolean --如果这个扫描器中还有可读数据的时候则返回true
next() --从这个扫描器返回下一个标志作为字符串
nextLine():String --使用行分隔符从这个扫描器返回一个行字符串
nextByte():byte --从这个扫描器返回下一个标志为byte的值
nextShort():short --从这个扫描器返回下一个标志为short的值
nextInt():int --从这个扫描器返回下一个标志为int的值
nextLong():long --从这个扫描器返回下一个标志为long的值
nextFloat():float --从这个扫描器返回下一个标志为float的值
nextDouble():double --从这个扫描器返回下一个标志为double的值
useDelimiter(pattern:String):Scanner --设置这个扫描器的分割模式并返回这个扫描器
1 package demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 文本读取数据测试 7 * Created by luts on 2015/12/2. 8 */ 9 public class test { 10 public static void main(String[] args) throws Exception{ 11 java.io.File file = new java.io.File("scores.txt"); 12 13 Scanner input = new Scanner(file); 14 15 while(input.hasNext()){ 16 String name = input.next(); 17 int score = input.nextInt(); 18 System.out.println(name + ": " +score); 19 } 20 21 //关闭文件 22 input.close(); 23 } 24 }
Joke:: 90
Lucy:: 80
方法nextByte()、nextShort()、nextInt()、nextLong()、nextFloat()、nextDouble()和next()等都成为令牌读取方法(token-reading method),因为这些方法读取用分隔符隔开的令牌。默认的分隔符为空格。
一个令牌读取方法首先跳过任意的分隔符,然后读取一个以分隔符结束的令牌,接着令牌会根据对应的方法转成相应的数据类型。
next()方法读取一个由分隔符分隔的字符串,nextLine()读取一个由行分隔符分隔的一行字符串。