java 文件 流水_java File (文档流)

本文详细介绍了Java中数据流的概念,包括输入流、输出流、缓冲流以及数据源和数据宿。讨论了节点流和处理流的区别,并重点讲解了字符流的Reader和Writer类的常用方法。此外,还涵盖了File类的使用,如文件的读写、判断文件属性、文件操作等实用方法。通过代码实例展示了如何在Java中进行文件操作。
摘要由CSDN通过智能技术生成

一、   数据流的基本概念

1.数据流

在Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式。传输中的数据就像流水一样,也称为数据流。

2 .I/O数据流的分类方式

数据流分为输入流和输出流两类。输入流只能读取不能写。而输出流只能写不能读。(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之“输入”数据,将程序中的数据传送到外部谓之“输出”数据。

)

3.缓冲流(Buffered Stream)

对数据流的每次操作都是以字节为单位进行的,既可以向输出流写入一个字节,也可从输入流中读取一个字节。显然效率太低,通常使用缓冲流,即为一个流配置一个缓冲区,一个缓冲区就是专门传送数据的一块内存。

4.数据源(Data Sourcc):是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。

5.数据宿(Data Sink):指能够接收数据的地方,可以是磁盘文件、网络接口以及显示器、打印机等外部设备。(数据宿也可认为是数据传输的目的地)

二、节点流和处理流

根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)

节点流可以从/向一个特定的地方读/写数据。

处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。

三、   字符流

1.字符输入流Reader

Reader类为所有面向字符的输入流的超类,声明为java.io中的抽象类。

public int read():读取一个字符,返回的是读到的那个字符。如果读到流的末尾,返回-1。

public int read(char[] cbuf):将读到的字符存入指定的数组中,返回的是实际读取的字符数。如果读到流的末尾,返回-1。

public abstract int read(char[] cbuf,int off,int len):将读到的字符存入数组的指定位置(off),每次最多读len个字符,返回实际读取的字符数。如果读到流的末尾,返回-1。

close():读取字符其实用的是window系统的功能,使用完毕后,进行资源的释放。

2.字符输出流writer

Weiter类为所有面向字符的输出流的超类,声明为java.io中的抽象类。

public void write(int c):将一个字符写入到流中。

public void write(char[]):将数组中的字符依次写出。

public abstract void write(char[] bcbuf,int off,int len):将数组中下标off开始的len个字符写出。

public void write(String):将一个字符串写入到流中。

public abstract void flush():刷新流,将流中的数据刷新到目的地中,流还存在。

public abstreact void close():关闭资源,关闭前会先调用flush,刷新流中的数据去目的地,然后流关闭。

File():构造函数,一般是依据文件所在的指定位置来创建文件对象。

CanWrite():返回文件是否可写。

CanRead():返回文件是否可读。

CompareTo(File pathname):检查指定文件路径间的顺序。

Delet():从文件系统内删除该文件。

DeleteOnExit():程序顺利结束时从系统中删除文件。

Equals(Object obj):检查特定对象的路径名是否相等。

Exists():判断文件夹是否存在。

GetAbsoluteFile():返回文件的完整路径。

GetAbsolutePath():返回文件的完整路径。

GetName():返回文件名称。

GetParent():返回文件父目录路径。

GetPath():返回文件的潜在相对路径。

GetParentFile():返回文件所在文件夹的路径。

HashCode():返回文件哈希码。

IsDirectory():判断该路径指示的是否是文件。

IsFile():判断该路径指示的是否是文件。

LastModified() :返回文件的最后修改时间标志。

Length():返回文件长度。

List():返回文件和目录清单。

Mkdir():生成指定的目录。

RenameTo(File dest):更名文件。

SetReadOnly():将文件设置为可读。

ToString():返回文件状态的字符串。

ToURL():将文件的路径字符串转换成URL

File.GetCreationTime 读取创建时间

file.SetCreationTime 设置创建时间

File.GetLastAccessTime   读取最后访问时间

File.SetLastAccessTime   设置最后访问时间

File.GetLastWriteTime 读取最后修改时间

File.SetLastWriteTime 设置最后修改时间

File.GetAttributes 读取文件属性

File.SetAttributes 设置文件属性

4.1  判断方法

1 boolean canExecute()  判断文件是否可以执行

2 boolean canRead() 判断文件是否可读

3 boolean canWrite() 判断文件是否可写

4 boolean exist() 判断文件是否存在

5 boolean isDirectory() 判断文件是目录

6 boolean isFile() 判断是否是文件

7 boolean canHidden() 判断文件是否可见

8 boolean isAbsolute() 判断文件是否是绝对路劲 ,文件不存在也能判断

4.2获取方法

1.String getName()

2.String getPath()

3.String getAbsolutePath()

4.String getParent()//如果没有父目录返回null

5.long lastModified()//获取最后一次修改的时间

6.long length()

7.boolean renameTo(File f)

8.File[] liseRoots()//获取机器盘符

9.String[] list()

10.String[] list(FilenameFilter filter)

五。代码实例方法使用:

package com.rimi.week6_1;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Arrays;

import java.util.Date;

public class Test1 {

public static void main(String[] args) {

String fName="889923,txt";

//fw(fName,"afiokjh");

//fw("book.txt","abacedfawgajppjp1234569");

//fr( "book.txt");

//fr2( fName);

//fd( "book.txt");

//fw("s8c.txt","woaibijxjijs");

//fw("des.txt","123");

//copyContent( "s8c.txt", "des.txt");

//fw("sb.txt","w123");

//appendContent("sb.txt","woqisilile ");

//tempFile();

//fw("123.txt","woaibaoxoe");

//changeDate();

//getFileSize("wqe.txt","sfwofio");

//changeName();

//changeChmod();

//ifExist("weo");

//createDir("/Users/rimi/Desktop/1/2/3/4/5/6");

//delete("/Users/rimi/Desktop/1");

//createDir( "/Users/rimi/Desktop/.j1702");//创建隐藏文件

//isHidden("/Users/rimi/Desktop/.j1702");//判断是不是隐藏文件

int index=0;

// printDirsStruct("/Users/rimi/Desktop/java1702",index);

//printFile("/Users/rimi/Desktop/java1702");

//FileDemo3 ();

FileDemo5 ();

}

public static void printFile(String fileName){

File file =new File (fileName);//返回由此抽象路径名表示的文件或目录的名称。

if(file.isDirectory()){

System.out.println(fileName+file.isDirectory());

}

System.out.println(file.getName());

for (String se : file.list()) {

File qu=new File(se);

System.out.println("文件结构:"+qu);

}

}

//打印文件的目录结构

public static void printDirsStruct(String fileName,int index){

File file =new File(fileName);

System.out.println(fileName+file.isDirectory());

if(file.isDirectory()){

for(int i=0;i

System.out.print("_");

}

System.out.println(file.getName());

for (String su : file.list()) {

String newfile=fileName+"/"+su;

File fq=new File(newfile);

//System.out.println("目录结构:"+newfile);

if(fq.isDirectory()){

printDirsStruct(newfile,(index+2));

}

}

}

}

//判断是不是隐藏文件

public static void isHidden(String fileName){

File file =new File (fileName);

if(file.isHidden()){

System.out.println(file+"是隐藏文件吗?"+file.isHidden());

}

}

//递归删除目录

public static void delete(String path){

File file=new File(path);//打开这个file文件

if(file.isDirectory()){//2.判断这个file是不是目录

if(file.list().length>0){//3.如果是目录,判断里面还有没有子目录

for (String fw : file.list()) {//4.如果有子目录就继续调用本方法

String arr=path+"/"+fw;

System.out.println("arr"+arr);

delete(arr);//调用本身的时候就停止下面的代码执行

}

}

}

if(file.delete()){//如果

System.out.println(path+"目录删除成功");

}

}

//创建目录

public static void createDir(String path){

File file =new File (path);

//file.mkdir();创建单个目录

//System.out.println("成功创建目录"+path+file.mkdirs());

if(file.mkdirs()){

System.out.println("创建目录成功");

}else{

System.out.println("创建目录失败");

}

}

//判断文件和目录是否存在

//file.exists()句柄,检测文件是否存在

public static void ifExist(String fileName){

try{

File file=new File(fileName);

System.out.println(fileName+"文件存在吗?"+file.exists());

}catch(Exception e){

}

}

//设置文件只读

public static void changeChmod() {

try {

File file=new File("sb.txt");

System.out.println("设置文件为只读成功了吗?"+file.setReadOnly());

System.out.println("文件可以写入吗?"+file.canWrite());

}catch(Exception e){

}

}

//文件的重命名

public static void changeName() {

try {

File oldName = new File("123.txt");

File newName=new File("wer.txt");

if(oldName.renameTo(newName)) {

System.out.println("已 重命名");

}else {

System.out.println("Error");

}

}catch(Exception e) {

}

}

//获取文件的大小

//fw.isFile()测试此抽象路径名表示的文件是否是一个标准文件

//fw.exists()判断这个文件存不存在

public static void getFileSize(String fileName,String content) {

try {

File fw=new File(fileName);

FileWriter fm=new FileWriter(fw);

fm.write(content);

fm.close();

if(!fw.exists()||!fw.isFile() ){

System.out.println("文件不存在");

}

System.out.println(fileName+"的大小是:"+fw.length());

}catch(Exception e) {

}

}

//修改文件最后的修改日期

public static void changeDate(){

try {

File fl = new File("sb.txt");

// fl.createNewFile();

Date filetime = new Date(fl.lastModified());//获取最后修改时间

System.out.println("修改之前"+filetime.toString());//输出时间

//设置最后修改时间

System.out.println("修改时间是否成功"+fl.setLastModified(System.currentTimeMillis()+1000000));

filetime = new Date(fl.lastModified());//获取最后修改后的最后修改时间

System.out.println("修改之后:"+filetime.toString());

} catch (Exception e) {

// TODO: handle exception

}

}

//创建临时文件

//file.exists()表示判断文件是否存在

public static void tempFile() {

File file=new File("tempTest.txt");

if(file.exists()) {

System.out.println("文件已经存在");

}else {

System.out.println("文件不存在");

try {

FileWriter fw=new FileWriter(file);

fw.write("dfhiowjf");

fw.close();

file.createNewFile();

System.out.println("创建临时文件成功");

file.deleteOnExit();//文件在程序退出的时候被删除

Thread.sleep(10000);//文件显示停留10秒,

}catch(Exception e) {

}

}

}

//追加文件内容

public static void appendContent(String fileName,String content) {

try {

BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));

bw.write("w123");

bw.close();

bw=new BufferedWriter(new FileWriter(fileName,true));

bw.write(content);

bw.close();

}catch(Exception e){

}

}

//文件内容的复制 src 要被复制的文件, des 接收复制内容的文件

public static void copyContent(String src,String des) {

try {

// 源文件

InputStream in =new FileInputStream(new File(src));

// 目标文件

OutputStream out=new FileOutputStream(new File(des));

//1.创建每次读取的大小

byte[]buf=new byte[100];

int len;

//读写

while((len =in.read(buf))>0) {

out.write(buf,0,len);

}

in.close();

out.close();

}catch(Exception e) {

}

}

//删除文件

//File 文件句柄

public static void fd(String fName) {

try{

// 获取文件句柄

File f=new File(fName);

//判断是否被删除

if(f.delete()) {

System.out.println("文件删除成功");

}else {

System.out.println("文件删除失败");

}

}catch(Exception e) {

}

}

/*读取文件里面的内容

* readLine()读取一个文本行。

BufferedReader 获取文件读取句柄,读取文件内容()

*/

public static void fr2(String fName) {

try {

FileReader fr=new FileReader(fName);

BufferedReader br =new BufferedReader(fr);

String str;

while ((str=br.readLine())!=null){

System.out.println(str);

}

br.close();//关流

fr.close();

}catch(IOException e) {

}

}

//读取文件里面的内容

//FileReader 文件读句柄

//fr.read(ca,0,15)ca 表示读取的数组名0表示从什么位置开始读取15表示读取的长度

//“IoException“(流异常,通常用在文件读取中)是”Exception”(用在所有的异常处理中)的一个分支,

//也就是说“Exception”的范围更大

public static void fr(String fName) {

try {

FileReader fr=new FileReader(fName);

char[]ca=new char[14];

fr.read(ca, 4, 10);

System.out.println("ca==="+Arrays.toString(ca));

fr.close();

}catch(Exception e) {

e.printStackTrace();

}

}

//创建文件名为rtuw.txt内容为afiokjh

public static void fw(String fName, String content) {

try {

FileWriter fw =new FileWriter(fName);

fw.write(content);

fw.close();

}catch(IOException e) {

}

}

// 列出磁盘下的文件和文件夹

public static void FileDemo3 (){

File[] files =File.listRoots();

for(File file:files){

System.out.println(file);

if(file.length()>0){

String[] filenames =file.list();

for(String filename:filenames){

System.out.println(filename);

}

}

}

}

// 利用递归列出所有文件

public static void FileDemo5 (){

File f =new File("/Users/rimi/Desktop");

showDir(f);

}

public static void showDir(File dir){

System.out.println(dir);

File[] files =dir.listFiles();

for(File file:files){

if(file.isDirectory())

showDir(file);

else

System.out.println(file);

}

}

public static void FileDemo4() {

}

六。file 文档流综合应用

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.rimi.week6_1;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.util.Scanner;/** 基于文件系统存储的 ATM 用户系统

* 功能: 注册,登陆,存钱,取钱,注销

* 1.每一个用户账户创建一个文件

* 2。文件名使用用户名定义

* 3.密码为6位

* 4.最多只能存100万,超过提示钱太多了

* 5.注销的时候要注意,账户里面没有钱

* 6.注册的时候要注意,密码必须为6位

* 7.判断账号是否重复

* 8.取钱要注意余额够不够

* 9.所有操作都可以循环进行

**/

public classNewAtm {public static void main(String[] args) throwsException {

System.out.println("********欢迎使用花旗银行*********");

System.out.println("请输入选项:1.注册 2.登陆 ");

Scanner in=newScanner(System.in);int function=in.nextInt();if(function==1){

register();

}if(function==2){

login();

}

}//************注册账号*******************

public static void register()throwsException{

System.out.println("请输入注册的账号(账号长度为9位数):");

Scanner in=newScanner(System.in);

String account=in.next();if(account.length()==9){

File file=newFile(account);if(!file.exists()){

a1:while(true){

System.out.println("请输入账户密码(密码的长度为6位):");

String password=in.next();if(password.length()==6){

System.out.println("请再次输入账户密码:");

String password1=in.next();if(password.equals(password1)){

System.out.println("请输入开户金额:");

String Money=in.next();if(!ifCharacter(Money)){

FileWriter fw= newFileWriter(account);

BufferedWriter bw= new BufferedWriter(new FileWriter(account,true));

String account1=account+password+Money;

bw.write(account1);

fw.close();

bw.close();

System.out.println("恭喜你账号注册成功");

System.out.println("你的账户信息为:");

System.out.println("账号为"+account+"\n"+"密码为:"+password+"\n"+"账户余额为:"+Money+"元"+"\n");

login();return;

}else{

System.out.println("你输入的不是有效数字!请重新输入:");

register();

System.out.println("请选择:1. 退出系统");int b=in.nextInt();if(b==1) {return;

}

}

}else{

System.out.println("两次输入的密码不一样");continuea1;

}

}else{

System.out.println("你输入的账号长度不正确,请重新输入");continuea1;

}

}

}else{

System.out.println("你输入的账号已经存在!请选择:1.重新输入 2.登录账号");int v=in.nextInt();switch(v) {case 1: register();break;case 2:login();break;

}

}

}else{

System.out.println("你输入的账号长度不正确,请重新输入!");

register();

}

}//**********登录页面****************

public static void login() throwsException{

System.out.println("请输入账号:");

Scanner in=newScanner(System.in);

String account=in.next();

File file=newFile(account);if(file.exists()){

System.out.println("账号存在");

System.out.println("请输入你的密码:");

String newpassword=in.next();

FileReader fr= newFileReader(account);//BufferedReader 创建一个文件内容读取句柄

BufferedReader br = newBufferedReader(fr);

String str=br.readLine();

String s=str.substring(9,15);

fr.close();if(s.equals(newpassword)){

System.out.println("密码验证成功");

longin1(account);

}else{

System.out.println("密码验证失败");

System.out.println("你的账号不存在!1.注册新账号 2.重新输入");int function=in.nextInt();if(function==1){

register();

}if(function==2){

login();

}

}

}else{

System.out.println("账号不存在!1.注册新账号 2.退出");int Options=in.nextInt();if(Options==1){

register();

}if(Options==2){

System.out.println("欢迎使用花旗银行!");return;

}

}

}//************登录页面1************

public static void longin1(String account) throwsException{

System.out.println("请输入选项:1.查询 2.存钱 3.取钱 4.注销账号 5.修改密码 6.退出系统");

Scanner in=newScanner(System.in);int function1=in.nextInt();if(function1==1){

Inquiry(account);

}if(function1==2){

saveMoney(account);

}if(function1==3){

drawMoney(account);

}if(function1==4){

writeOff(account);

}if(function1==5){

ChangePassword( account );

}if(function1==6) {

System.out.println("欢迎使用花旗银行!");return;

}

}//*************查询***********

public static void Inquiry(String account) throwsException{

FileReader fr= newFileReader(account);//BufferedReader 创建一个文件内容读取句柄

BufferedReader br = newBufferedReader(fr);

String str=br.readLine();

String s=str.substring(15,str.length());

System.out.println("账户余额为:"+s);

fr.close();

System.out.println("请选择: 1.返回 2.退出系统");

Scanner in=newScanner (System.in );int Options1=in.nextInt();if(Options1==1){

longin1( account);

}if(Options1==2){

System.out.println("欢迎使用花旗银行!");

}

}//***********存钱******************

public static void saveMoney( String account) throwsException{

Scanner in=newScanner(System.in);

System.out.println("请存入金额(最多存入100万):");

String newMoney=in.next();if(!ifCharacter(newMoney)){

Double cMoney=Double.valueOf(newMoney);if(cMoney>1000000){

System.out.println("对不起!你输入的金额已经超限!");

System.out.println("请选择:1.重新输入 2.返回");int b=in.nextInt();switch(b){case 1:saveMoney( account);break;case 2:

longin1(account);break;

}

}else{

cMoney=Double.valueOf(newMoney);

FileReader fr= newFileReader(account);//BufferedReader 创建一个文件内容读取句柄

BufferedReader br = newBufferedReader(fr);

String str=br.readLine();

String s2=str.substring(0,15);

String s=str.substring(15,str.length());

fr.close();try{

Double b=Double.valueOf(s);

Double Money1=cMoney+b;

String Money2=String.valueOf(Money1);

BufferedWriter bv= new BufferedWriter(newFileWriter(account));

bv.write(s2+Money2);

bv.close();

System.out.println("存钱已经完成!");

System.out.println("账户余额为:"+Money1);

fr.close();

System.out.println("请选择:1.返回 2.退出系统");int u=in.nextInt();if(u==1){

longin1(account);

}if(u==2){

System.out.println("欢迎使用花旗银行!");

}

}catch(NumberFormatException e) {

e.printStackTrace();

}

}

}else{

System.out.println("你输入的不是有效数字,请重新输入!");

saveMoney(account);

}

}//*************取款******************

public static void drawMoney(String account) throwsException{

Scanner in=newScanner(System.in);

System.out.println("请输入取款金额:");

String newMoney1=in.next();if(!ifCharacter(newMoney1)){

Double cMoney1=Double.valueOf(newMoney1);

FileReader fr= newFileReader(account);//BufferedReader 创建一个文件内容读取句柄

BufferedReader br = newBufferedReader(fr);

String str=br.readLine();

String s2=str.substring(0,15);

String q=str.substring(15,str.length());

fr.close();

br.close();

Double OldMoney=Double.valueOf(q);if(cMoney1>OldMoney){

System.out.println("对不起!你金额不足!");

System.out.println("请选择:1.重新输入 2.返回");int b=in.nextInt();switch(b){case 1: drawMoney( account);break;case 2:

longin1(account);break;

}

}else{try{

Double Money1=OldMoney-cMoney1;

String Money2=String.valueOf(Money1);

BufferedWriter bv= new BufferedWriter(newFileWriter(account));

bv.write(s2+Money2);

bv.close();

System.out.println("取款已经完成!");

System.out.println("账户余额为:"+Money1);

fr.close();

System.out.println("请选择:1.返回 2.退出系统");int u=in.nextInt();if(u==1){

longin1(account);

}if(u==2){

System.out.println("欢迎使用花旗银行!");

}

}catch(NumberFormatException e) {

e.printStackTrace();

}

}

}else{

System.out.println("你输入的不是有效数字,请重新输入!");

saveMoney(account);

}

}//***************注销*************

public static void writeOff(String account) throwsException{

FileReader fr= newFileReader(account);

BufferedReader br= newBufferedReader(fr);

String str=br.readLine();

String q=str.substring(15,str.length());

fr.close();

br.close();

Double OldMoney=Double.valueOf(q);if(OldMoney>0) {

System.out.println("你的账户中有余额,不能注销!");

System.out.println("请选择:1.返回 2.退出系统");

Scanner in=newScanner(System.in);int b=in.nextInt();if(b==1){

longin1(account);

}if(b==2){

System.out.println("欢迎使用花旗银行!");

}

}else{try{

File f=newFile(account);if(f.delete()) {

System.out.println("账户注销成功!");return;

}else{

System.out.println("账户注销失败!");return;

}

}catch(Exception e) {

}

}

}public static void ChangePassword(String account ) throwsException{

System.out.println("请输入原始密码:");

Scanner in=newScanner (System.in);

String oldPassword=in.next();

FileReader f=newFileReader(account);

BufferedReader bn=newBufferedReader(f);

String mb=bn.readLine();

String vn=mb.substring(9,15);

String vn1=mb.substring(0, 9);

String vn2=mb.substring(15,mb.length());

f.close();

bn.close();if(oldPassword.equals(vn)){

System.out.println("请输入新密码:");

String newpass1=in.next();

System.out.println("请再次输入新密码:");

String newpass2=in.next();if(newpass1.equals(newpass2)){

File file=newFile(account);

FileWriter xin=newFileWriter(file);

xin.write(vn1+newpass1+vn2);

xin.close();

System.out.println("恭喜你密码已修改成功!");

System.out.println("请选择:1.返回上一层 2.退出系统");int xu1=in.nextInt();if(xu1==1){

longin1(account);

}if(xu1==2){

System.out.println("欢迎您使用花旗银行!");return;

}

}else{

System.out.println("你两次输入的密码不一样!");

System.out.println("请选择:1.重新输入 2.返回上一层");int xu=in.nextInt();if(xu==1){

ChangePassword( account );

}if(xu==2){

longin1(account);

}

}

}else{

System.out.println("你输入的原始密码有误!请重新输入:");

ChangePassword(account );

}

}public static booleanifCharacter(String sw){for(int i=0;i

}return false;

}return false;

}

}

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值