Java 的输入输出

10人阅读 评论(0) 收藏 举报

在java中,文件或则目录习惯上是用java.io.File对象来表示,但是File类存在一定的缺陷,所以Java7中在NIO2包中带来了更好的替代:java.nio.file.Path接口。


java.nio.file包中还有另一个成员FileSystem类,FileSystem类表示文件系统,是个抽象类,可以调用FileSystem类的getDefault()静态方法来获取当前的文件系统:FileSystem fileSystem = FileSystems.getDefault();
FileSystem中含有其他方法:

  • getSeprator方法返回String的名称分隔符
  • getRootDirectories返回用于迭代根目录的Iterable
  • getPath用来创建Pathpublic abstract Path getPath(String first,string... more)first参数是必须的。
    用例:Path path = FileSystem.getDefault().getPath("/home/user/images");或则Path path =FileSystems.getDefault().getPath("/home","user","images");

不过java.nio.file.Paths类提供了一个快捷方法,可以通过他的静态get方法来创建PathPath path1=Paths.get("C:\temp");

  1. Path中的getNameCount方法返回路径中名称的数量,
  2. 用getName可以检索到每个名称
  3. Path getFileName()返回当前路径的文件名
  4. Path getParent()
  5. Path getRoot()

java.nio.file.Files是个强大的类,提供了处理文件和目录以及读取文件和写入文件的静态方法
1.创建和删除文件和目录
创建文件:

public static Path createFile(Path file,java.nio.file.attribute.FileAttribute<?> ... attrs)

如果不存在父目录,createFile就会抛出一个IOException,如果已经存在由file指定名称的文件、目录或者符号链接,就会抛出一个FileAlreadyExistsException。
创建目录:

public static Path createDirectory(Path directory,java.nio.file.attribute.FileAttribute<?>... attrs)

删除文件、目录或者符号链接

public static void delete(Path path)

如果path不存在,则会抛出NoSuchFileException。删除路径时,必须检测路径是否存在,用deletIfExists

public static void deleteIfExists(Path path)

如果正在删除的目录不是空的,抛出DirectoryNotEmptyException
2.检索目录的对象
用File类的newDirectoryStream方法来检索目录中文件、子目录和符号链接,这个方法将返回一个DirectoryStream来迭代目录中所有的对象。newDirectoryStream方法

public static DirectoryStream<Path> newDirectoryStream(Path path)

此方法返回DirectoryStream使用后必须关闭
用例——输出一个目录中的所有的子目录和文件

Path parent = ...
try (DirectoryStream<Path> children =Files.newDirectoryStream(parent))
{
    for (Path child: children){
        System.out.println(child);
    }
}catch (IOException e){
    e.printStackTrace();
}

3.复制和移动文件

public static Path copy(Path source,Path target

CopyOption是java.nio.file中的一个接口,StandardCopyOption枚举是他的一个实现有三个复制选项

  1. ATOMIC_MOVE,将移动个文件作为原子文件系统操作
  2. COPY_ATTRIBUTES把属性复制给新文件
  3. REPLACE_EXISTING如果文件存在,替换他
public static Path move(Path source ,Path target,CopyOption... options)throws java.io.IOException

4.文件的读取和写入
readAllBytes和readAllLines方法分别用来从二进制和文本文件读取

public static byte[] readAllBytes(Path path)throws java.io.IOException
public static List<String> readAllLines(Path path,java.nio.charset.Charset charset)throws java.io.IOException

用write分别来写入二进制文件和文本文件

public static Path write(Path path,byte[] bytes,
        OpenOption... options)throws java.io.IOException

public static Path write(Path path,java.lang.Iterable<? extends 
        CharSequences>lines,java.nio.charset.Charset charset,
        OpenOption... options)throws java.io.IOException

OpenOption接口提供下面这些值:

  1. APPEND要写入的数据添加到文件末尾
  2. CREATE不存在就创建一个新文件
  3. CREATE_NEW已经存在就创建一个新文件并且抛出异常
  4. DELETE_ON_CLOSE关闭时删除文件
  5. DSYNC文件内容更新时会同步写入
  6. READ打开文件进行读取
  7. SPARSE稀疏文件
  8. SYNC指示文件内容和元素据的更新会同步写入
  9. TRUNCATE_EXISTING如果文件打开进行写入,并且文件已经存在,就把文件的长度缩短到0
  10. WRITE写入
    java.nio.charset是个表示字符集的抽象类,需要指定在字符编码成字节和字节解码成字符是使用的字符集。
    创建Charset最容易的方法是调用静态Charset.forName传递字符集名称。例如
Charset useAscii = Charset.forName("US-ASCII");

输入输出流
根据数据的方向不同,有输入输出流,用输入流从接收端读取,用输出流写入接收端。流用java.io包中的四个抽象类来表示

  • Reader从接收端读取字符的流
  • Write将字符写入接收端的流
  • InputStream从接收端读取二进制数据的流
  • OutStream将二进制数据写入接收端的流

    使用流的典型操作顺序如下:

  • 创建流,生成的对象已经打开,因此不用调用open方法

  • 执行读取或者写入操作
  • 通过调用close方法关闭流,由于目前大多数流类都实现java.lang.AutoCloseable因此可以可以用try-with-resource语句创建流,并且让流自动关闭

    ……写的好累,以后再慢慢补充吧

查看评论

java输入输出处理

  • 2009年05月16日 21:12
  • 76KB
  • 下载

java输入输出的理解和掌握

1.数据流的基本概念:     数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中...
  • lwhlwh2012
  • lwhlwh2012
  • 2016-03-25 17:41:11
  • 948

Java中的输入输出总结

Java中的输入输出总结
  • yinchaoji_
  • yinchaoji_
  • 2016-11-29 16:02:23
  • 540

Java中关于最简单的输入输出字节流操作

Java中关于文件的读入和写出
  • jjb_584520
  • jjb_584520
  • 2016-11-01 15:55:33
  • 679

java基础知识之输入输出

Java的System.out来表示标准输出设备,默认是先显示器;System.in表示标准输入设备,默认是键盘;可以使用Scanner类从控制台输入,Scanner在java.util类里面。 使...
  • QW121301152358
  • QW121301152358
  • 2016-08-13 16:36:51
  • 531

Java Socket输入输出时需注意

1、对协议中出现的各种结构体,现用现设,不要觉得头晕,一步一步来; 2、输入,输出BufferInputStream/BufferOutputStream ,在使用输入时,若文件交大,可以用inpu...
  • sinat_28729797
  • sinat_28729797
  • 2015-10-12 15:40:29
  • 497

Java中的输入输出(I/O)总结

stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:  (1)字节...
  • zkx2013
  • zkx2013
  • 2017-04-01 23:59:08
  • 1086

JAVA IO 输入输出处理.ppt

  • 2010年05月23日 10:01
  • 71KB
  • 下载

java输入输出(快速)

java输入输出(快速)
  • u012476429
  • u012476429
  • 2014-09-28 10:17:10
  • 1838

java的标准输入输出(一)

1.回顾C++的标准输入和输出 在C++中,标准的输入输出是使用iostream库,cin为标准输入,cout为标准输出,cerr为输出警告和报告错误消息。clog是用来输出程序运行的一般信息。 ...
  • wf131410000
  • wf131410000
  • 2015-11-23 15:44:45
  • 6118
    个人资料
    持之以恒
    等级:
    访问量: 3559
    积分: 227
    排名: 31万+
    文章分类
    文章存档