Java 文件操作 , 这也是基于Java API 操作来实现的。

文件是操作系统管理外存数据管理的基本单位, 几乎所有的操作系统都有文件管理机制。 所谓文件, 是具有符号名而且在逻辑上具有完整意义的信息。 在操作系统中, 文件是以目录的方式进行组织管理, 文件在目录中的位置称为文件的路径。  

File类:

就是文件和目录路径名的抽象表示形式。 其构造方法有:

     public File(String pathName);
public File(String parent,String child);
public File(File parent,String child);

处理文件名:

String getName( );//得到一个文件的名称( 不包括路径)
String getPath( );//得到一个文件的路径名
String getAbsolutePath( );//得到一个文件的绝对路径名
String getParent( );//得到一个文件的上一级目录名
String renameTo(File newName);//将当前文件名更名为给定文件的完整路径
 

属性测试方法:

方法 含义
boolean exists() 测试当前File对象所指示的文件是否存在
boolean canWrite() 测试当前文件是否可写
boolean canRead() 测试当前文件是否可读
boolean isFile() 测试当前文件是否是文件(非目录)
boolean isDirectory() 测试当前文件是否目录

普通文件信息和工具:

方法 含义
long lastModified() 得到文件最近一次修改时间
long length() 得到文件长度(以字节为单位)
boolean delete() 删除当前文件

目录操作:

方法 含义
boolean mkdir() 根据当前对象生成一个由该对象指定的路径

String list() 列出当前目录下的文件

举几个栗子 :

 通过程序创建新文件
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
File file = new File("d:\\woniuxy\\1.txt");
try {
//当文件已经存在时返回false, 创建失败
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

目录遍历与文件信息:

String[] list()
该方法返回一个字符串数组, 这些字符串指定此抽象路径名表示的目录中的子文件和子目录。 如果此抽象路径名不表示一个目录, 那么此方法将返回null;
File[] listFiles()
该方法返回一个抽象路径名数组, 这些路径名表示此抽象路径名所表示目录中文件。 如果此抽象路径名不表示一个目录,那么此方法将返回null;

举个栗子:

递归显示c盘下所有文件夹及其中文件:
public static void main(String[] args) {
File root = new File("c:/");
showAllFiles(root);
}
public static void showAllFiles(File dir) {
File[] fs = dir.listFiles();
for (File file : fs) {
if(file.isDirectory()){
showAllFiles(file);
}else{
System.out.println(file.getPath());
}
}
}

I/O 与流:

“流” 可以看作是一个流动的数据缓冲区, 数据从数据源流向数据目的地。 在Java语言中, 将不同类型的I/O抽象为流。 所谓“流( stream) ” , 可以看作是数据在文件或程序之间的传递 。

流的分类:

1, 按照数据流向分类:

—---->>输入流(InputStream) : 从外部设备(键盘、 鼠标、 文件、 网络等)到计算机的数据流动;
—---->>输出流(OutputStream) : 从计算机到外部设备(屏幕、 打印机、 文件等)的数据流动。

2,按照数据类型可分为:

——>>>字节流: 用于读/写字节类型的数据(包括ASCII表中的字符)。 类可分为InputStream类及其子类及OutputStream类及其子类。
——>>>字符流 : 用于读/写字符( 16位 Unicode 码) 。 包括Reader类及其子类及Writer类及其子类。

我们来看下流的结构:

常用的字节流与区别:

  • DateInputStream

数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本java数据类型。 应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

  • ByteArrayInputStream

ByteArrayInputStream包含一个内部缓冲区, 被称为内存流, 该缓冲区存储从流中读取的字节。 内部计数器跟总read方法要提供的下一个字节。
关闭ByteArrayInputStream无效。 此类中的方法在关闭此流后仍可被调用, 而不会产生任何IOException。

FileInputStream类:

此类是输入流, 字节流, 是InputStream类的子类, 常用的构造方法有:

public FileInputStream(String name) throws FileNotFoundException

String name是一个完整的路径名

public FileInputStream(File file) throws FileNotFoundException

根据File对象创建文件
举个栗子:

 //利用FileInputStream将D盘下OK文本文件读取到程序中:
public static void showAllFiles(File dir) throws IOException {
File infile = new File("D:/ok.txt");
InputStream input = new FileInputStream(infile);
byte[] b = new byte[(int)infile.length()];
//从输入流中获取的有效数据长度
input.read(b);
//转化成字符串类型
System.out.println(new String(b));
}

FileOutputStream类:

此类是输出流、 字节流, 是OutputStream类的子类, 常用的构造方法有:

public FileOutputStream(String name)

String name是完整的路径。

public FileOutputStream(String name,boolean append)

String name是完整的类路径。
举个栗子:

 //输出数据到D盘的fos.txt文件中:
public static void showAllFiles(File dir) throws IOException {
// 创建字节输出流对象
File file = new File("D:\\fos.txt");
FileOutputStream fos = new FileOutputStream(file);
// 写数据
fos.write("hello,IO".getBytes());
// 释放资源
fos.close();
}

字符流类:

FileReader类:

FileReader是InputStreamReader的子类, 是字符流, 输入流。FileReader类创建了一个可以读取文件内容的Reader类, 它的构造函数有:

FileReader(String filePath) filePath是一个文件的完整路径;
FileReader(File fileObj) fileObj是描述该文件的File对象;

  举个栗子:

 //使用FileReader读取文件:
public static void showAllFiles(File dir) throws IOException {
FileReader fr = new FileReader("c://in.txt");
BufferedReader br = new BufferedReader(fr);
String context = "";
while((context = br.readLine()) != null){
System.out.println(context);
}
}

FileWriter类

FileWriter是OutputStreamWriter的子类, 是字符流, 输出流。FileWriter创建一个可以写文件的Writer类。 构造函数:

构造方法 含义
FileWriter(String filePath) filePath 是一个文件的完整路径
FileWriter(String filePath,boolean append) 如果 append 为true ,输出是追加到文件末尾
FileWriter(Filefile fileobj) 是描述该文件的File对象
FileWriter(File  fileojb,boolean append) 是描述该文件的file对象,如果append 为true,输出是附加到文件末尾

举个栗子:

 //使用FileWriter写出文件到磁盘:
public static void showAllFiles(File dir) throws IOException {
String source = "learn how to write to file";
FileWriter f1 = new FileWriter("D:/file1.txt");
f1.write(source);
f1.close();
}

缓存流:

缓存是IO的一种性能优化, 缓存流为IO流增加了内存缓存区, 有了缓存区, 便可以减少系统直接与硬盘交互传输的次数, 增加每次传送的数据量, 借以提高传输效率, 保护硬件。有了缓冲功能, 则会将输出的内容先放置在内存中, 等到有一定数据量的时候, 或是流关闭、 或调用flush()方法时, 才会将相应的内容保存到硬盘或其他目的地中。
缓存流分BufferedInputStream和BufferedOutputStream两类。

BufferedInputStream类

BufferedInputStream类可以对所有的InputStream类进行带缓存区的包装, 以达到性能的优化。 此类提供了两个构造方法:

BufferedInputStream(InputStream in)
此形式的构造方法创建了一个带有32个字节的缓存流;
BufferedInputStream(InputStream in,int size)
此形式的构造方法按指定的大小(字节)来构造缓存流;

举个栗子:

 public class Demo{
public static void main(String[] args)throws IOException{
BufferedInputSteam buffers = null ;
File file = new File ("E:/test.txt");
byte[] buffer = new byte[(int)file.length()];
//创建bufferinpusteam对象
buffers = new BufferedInputSteam(new FileInputStream(file))
int bytesRead = 0;
try{
//从文件中按字节读取内容, 到文件尾部的时候read 方法将返回-1
while ((bytesRead = buffers .read(buffer)) !=-1) {
//将读取的字节转换为字符串对象
String chunk = new String(buffer,0,bytesRead ) ;
 System.out.println(chunk);
}
}catch (Exceptoion e){
e.printStackTrace();
}
} finally{
//关闭bufferinputstream
buffers.close();
}
}
}

BufferedOutputStream类

BufferedOutputStream类可以对所有的OutputStream类进行带缓存区的包装, 以达到性能的优化。 此类提供了两个构造方法:

 BufferedOutputStream(OutputStream out)
此方式创建了一个带有32个字节的缓存流;
BufferedOutputStream(OutputStream out, int size)
此方式按指定的大小(字节)来构造缓存流;

举个栗子:

    //利用BufferedOutputStream输出文件:
public static void showAllFiles(File dir) throws IOException {
FileOutputStream fos = new FileOutputStream("E:/test/2.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("hello Buffered".getBytes());
bos.close();
fos.close();
}

Java 基本文件操作的更多相关文章

  1. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  2. Java api 入门教程 之 JAVA的文件操作

    I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...

  3. java中文件操作的工具类

    代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...

  4. java csv 文件 操作类

    一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...

  5. java中文件操作《一》

    在日常的开发中我们经常会碰到对文件的操作,在java中对文件的操作都在java.io包下,这个包下的类有File.inputStream.outputStream.FileInputStream.Fi ...

  6. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  7. Java常用文件操作-2

    上篇文章记录了常用的文件操作,这里记录下通过SSH服务器操作Linux服务器的指定路径下的文件. 这里用到了第三方jar包 jsch-0.1.53.jar, jsch-api 1.删除服务器上指定路径 ...

  8. Java常用文件操作-1

    在我们的实际工作中经常会用到的文件操作,再此,将工作中碰到的做一个记录,以便日后查看. 1.复制文件夹到新文件夹下 /** * 复制文件夹下所有文件到指定路径 *@param oldPath *@pa ...

  9. 【java】文件操作java.io.File

    package 文件操作; import java.io.File; import java.io.IOException; public class TestFile { public static ...

  10. Java 8 文件操作(转)

    我们知道在JDK6甚至之前的时候,我们想要读取一个文本文件也是非常麻烦的一件事,而现在他们都变得简单了, 这要归功于NIO2,我们先看看之前的做法: 读取一个文本文件 BufferedReader b ...

随机推荐

  1. openlayers4 入门开发系列之地图导航控件篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  2. 联发科Helio P90(mt6779),P70(mt6775),P60(MT6771),P35,P22(MT6762)芯片参数规格

    Helio P90(mt6779)是一款人工智能处理平台,集成了超级强大的AI专核APU 2.0,具有超强的AI性能和一系列基于人工智能的成像升级.该芯片将重新定义消费者对智能手机AI功能的体验.He ...

  3. git 版本库基础知识学习

    什么是版本库?什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可 ...

  4. 终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  5. spring集成shiro登陆流程(下)

    首先声明入门看的张开涛大神的<跟我学shiro> 示例:https://github.com/zhangkaitao/shiro-example 博客:http://jinnianshil ...

  6. Fork/Join框架详解

    Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork/Join框架要完成两件事情: 1.任务分 ...

  7. 使用 coverlet 查看.NET Core应用的测试覆盖率

    代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率. Visual Studio 2017的企业版可以直接查看测试的代码覆盖率, ...

  8. 合肥.NET技术社区首次线下聚会全程回顾【多图】

    2019年3月16日对于合肥.NET来说是一个特别的日子,因为这是合肥.NET技术社区首次非正式线下聚会!这次聚会受场地限制(毕竟是聚餐的形式),即使换成了小椅子后,最多也只能容纳24个人,所以还有一 ...

  9. Spring入门(二):自动化装配bean

    Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中需要创建的bean. 自动装配(autowiring):Spring会自动 ...

  10. [翻译]Mock 在 Python 中的使用介绍

    目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...