/**
* File 类不仅单纯的指文件对象也可以指是目录对象
* 可以使用File 类操作文件和目录
* 以下实例可以说明
*/
package simon;
import java.io.*;
import java.util.*;
/**
*@author Simon lv
*文件类对象-- 文件和目录操作的综合实例
*创建文件夹创建文件
**/
public class FileDemo{
public static void main(String args[])throws IOException{
//提示输入目录
System.out.println("请输入目录地址:");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//从控制台输入的字符串地址
String address = reader.readLine();
//创建一个目录
File objDir = new File(address);
//如果对象存在
if(objDir.exists()){
System.out.println("已存在此目录!");
}else{
objDir.mkdirs(); //创建文件夹对象mkdirs() 方法和mkdir()有区别请自己尝试了解
System.out.println("已经在指定目录创建此文件夹!");
}
//在objDir 目录对象中创建一个test.txt 的文件
File objFile = new File(objDir,"test.txt");
//创建文件是否成功
boolean flag = objFile.createNewFile();
//如果成功
if(flag){
System.out.println(objFile.getAbsolutePath()+" 已经创建好指定文件!");
}else{
System.out.println("创建失败!(可能文件已经存在!)");
}
//打印文件信息
System.out.println("\n绝对路径:"+objFile.getAbsolutePath());
System.out.println("文件名称:"+objFile.getName());
System.out.println("字节大小:"+objFile.length());
System.out.println("文件对象路径:"+objFile.getAbsoluteFile());
//得到最后修改时间自年月日起的毫秒数
long time = objFile.lastModified();
//用毫秒数构建时间对象
Date dt = new Date(time);
System.out.println("最后修改时间:"+dt.toLocaleString());
System.out.println("父文件夹:"+objFile.getParent());
}
}
package demo;
import java.io.*;
import java.util.*;
public class FileRead{
public static void main(String args[])throws IOException{
File dir = new File("C:\\Simon\\TEST");
dir.mkdirs(); //在C盘位置创建一个Simon 的文件夹下有Test 文件夹
File file = new File(dir,"MYTEST.txt");
file.createNewFile(); //如果在Simon 文件夹下不存在MyTest.txt 文件的话就重新创建一个
FileRead.showFileInfo(file);
}
//显示文件夹/文件的信息
public static void showFileInfo(File objFile) throws IOException{
System.out.println("文件或者目录是否存在? "+objFile.exists()); //exists() 方法
System.out.println("是文件吗? "+objFile.isFile()); //isFile()方法
System.out.println("是目录吗? "+objFile.isDirectory()); //isDirectory() 方法
System.out.println("名称: "+objFile.getName());
System.out.println("路径: "+objFile.getPath());
System.out.println("上一层目录:"+objFile.getParent());//得到上一层目录
System.out.println("绝对路径: "+objFile.getAbsolutePath());//得到绝对路径
System.out.println("最后修改时间: "+new Date(objFile.lastModified()).toGMTString());//最后的修改时间
System.out.println("文件大小: "+objFile.length()); //文件大小
System.out.println("绝对路径上的文件对象: "+objFile.getAbsoluteFile());
File file = objFile.getParentFile().getParentFile(); //得到上一层目录对象的上一层
File objF = new File(file,"objF.txt");
objF.createNewFile(); //在上一层目录对象中创建一个文件
}
}
package demo;
import java.io.*;
public class FileInputStreamDemo{
public static void main(String args[]){
try{
File file = new File("C:\\Test.txt"); //创建一个文件对象
FileInputStream objFile = new FileInputStream(file); //创建一个文件输入流对象源文件对象file
int size=objFile.available(); //能读取到的字节数
System.out.println("可读取的字节:"+size);
System.out.println("文件内容如下: \n");
byte [] bt = new byte[size+1];
StringBuffer buf = new StringBuffer();
while(objFile.read(bt)!=-1){
buf.append(new String(bt));
}
System.out.println(buf.toString());
objFile.close(); //关闭输入流
}catch(IOException ex){
System.out.println("IO 流操作错误!\n");
}
}
}
package demo;
import java.io.*;
//字节流输出操作
public class FileOutputStreamDemo{
public static void main(String args[])throws IOException{
File file = new File("C:\\FileOutputStreamDemo.txt");//构建文件对象
//判断文件是否已经存在
if(file.exists()){
System.out.println("此文件已经存在!\n");
}else{
file.createNewFile(); //如果不存在就重新创建文件
System.out.println("创建成功!\n");
}
System.out.println("文件大小:"+file.length());
System.out.println("请输入文本内容:\n");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String mess = reader.readLine(); //输入的文本内容
byte bt[] = mess.getBytes(); //得到输入的字符串字节数组
//输出流对象
FileOutputStream out = new FileOutputStream(file);
//写操作
out.write(bt,0,bt.length);
System.out.println(file.getName()+" 文件已经更新!");
System.out.println("文件大小:"+file.length());
System.out.println("再次从"+file.getName()+" 读取文件内容!\n");
FileInputStream in = new FileInputStream(file);
int size = in.available(); //可读取的长度
byte bs[] = new byte[size+1];
StringBuffer buf = new StringBuffer();
//不断的循环读取数据源的内容
while((in.read(bs))!=-1){
buf.append(new String(bs));
}
System.out.println("内容为: "+buf.toString());
}
}
package demo;
import java.io.*;
//单独的FileReaderDemo 也可以进行数据流的操作
public class FileReaderDemo{
public static void main(String args[])throws IOException{
//绑定当前路径下的一个文件
File file = new File("FindString.txt");
//创建FileReader 对象
FileReader reader = new FileReader(file);
//字符数组
char ch[] = new char[200];
//不为-1 代表没有读取完
while(reader.read(ch)!=-1){
String str = new String(ch);
System.out.println(str);
}
}
}
package demo;
import java.io.*;
//BufferedReader 使用实例
public class BufferedReaderDemo{
public static void main(String args[]){
File file = new File("C:\\Test.txt"); //构建指定位置的一个文件对象
try{
if(!file.exists()){
file.createNewFile(); //如果这个文件不存在就创建一个新的
}
BufferedReader reader = new BufferedReader(new FileReader(file)); //构建reader 对象,读的对象是file
String str =null;
//每次读取一行不为空为止
while((str=reader.readLine())!=null){
System.out.println(str); //打印
}
reader.close();
}catch(IOException ex){
System.out.println("读写文件时出现的错误!");
}
}
}
package demo;
import java.io.*;
public class BufferedWriterDemo{
public static void main(String args[])throws IOException{
File file = new File("Test.txt");
if(!file.exists()){ //如果文件不存在就创建一个新的
file.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file)); //文件写对象
System.out.println("请输入信息EXIT-退出!");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //从控制台的输入
String str=null;
while((str=br.readLine())!=null){ //如果字符串不为空
if(str.equals("EXIT")){ //如果用户输入的是EXIT 就退出
break;
}else{
//写数据流
bw.write(str);
bw.newLine();
}
br = new BufferedReader(new InputStreamReader(System.in));
}
bw.flush();
br.close();
bw.close();
}
}
import java.io.*;
/**
* 文件内容的读取和追加处理
*/
public class WriteDemo{
public static void main(String args[])throws IOException{
File file = new File("C:\\FileDemo.txt"); //获取一个文件对象
StringBuffer buf = new StringBuffer();
FileInputStream in;
if(file.exists()){ //如果这个文件事先存在
System.out.println("文件已经存在!");
in = new FileInputStream(file); //创建输入流对象
int size = in.available(); //可读取的字节大小
byte bt [] = new byte[size];
while(in.read(bt)!=-1){
buf.append(new String(bt)); //先将文件中的内容全部取出
}
}else{ //如果这个文件事先不存在,就先创建一个文件对象
file.createNewFile();
System.out.println("\n新创建了一个文件! 文件名:"+file.getName());
}
System.out.println("请输入内容: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //重新输入的新内容
String str = reader.readLine();
//询问用户是否需要把从控制台上输入的文本替换以前文本中的内容
System.out.println("\n是否需要将已有文件内容替换? (Y/N)");
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
char ans = re.readLine().charAt(0); //得到用户回答
FileOutputStream out = new FileOutputStream(file); //构建输出流对象
if(ans=='Y'||ans=='y'){
out.write(str.getBytes()); //如果需要替换,就直接向文件中写文件
}else{
buf.append(str); //否则就追加以前的内容
out.write(buf.toString().getBytes()); //写文件
}
buf = new StringBuffer();
System.out.println("新的内容为: \n");
in = new FileInputStream(file); //创建输入流对象
int size = in.available(); //可读取的字节大小
byte bt [] = new byte[size];
//再重新取出所有内容
while(in.read(bt)!=-1){
buf.append(new String(bt)); //先将文件中的内容全部取出
}
System.out.println(buf.toString());
}
}
import java.io.*;
/**
* 通过文件名和关键字查找关键字在文件中出现的次数
*/
public class FindStringDemo{
public static void main(String args[])throws IOException{
//得到文件名
System.out.println("请输入文件名:");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String path = reader.readLine().trim();
//输入要查找的关键字
System.out.println("请输入关键字: ");
reader = new BufferedReader(new InputStreamReader(System.in));
String keyword = reader.readLine().trim();
//调用自定义的方法,返回这个关键字在文件中出现的次数
int ans=FindStringDemo.findStringBytes(path,keyword);
//跟据返回值做判断,这个返回值是我们自定义的
if(ans==-1){
System.out.println("这个文件的操作读取错误!");
}else if(ans==-2){
System.out.println("文件名输入不正确,请完整输入!");
}else{
System.out.println(keyword +" 在"+path+" 所在的文件里共出现了"+ans+" 次!"); //如果有,则输出关键字出现的次数
}
}
//根据输入的文件名和关键字找这个关键字出现的次数
public static int findString(String fileName,String keyWords){
int count=0;
File file = new File(fileName); //根据输入的文件名构建对象
//判断是否存在
if(!file.exists()){
System.out.println("请检查文件的路径是否正确!\n");
return -2;
}
try{
//使用BufferedReader 对象操作
BufferedReader reader = new BufferedReader(new FileReader(file));
//每次读取一行
String str = reader.readLine();
while(str!=null){
//找出字符串出现的位置
while(str.indexOf(keyWords)!=-1){
//System.out.println(str);
count++;
//把这个字符串出现前的字符去掉,在后一个部分再次搜索这个字符串,能解决一行中多次出现同一字符串的情况
str = str.substring(str.indexOf(keyWords)+1,str.length()-1);
}
str =reader.readLine();
}
}catch(IOException ex){
System.out.println("读写文件时发生的异常!\n");
return -1;
}
return count;
}
//根据输入的文件名和关键字找这个关键字出现的次数
public static int findStringBytes(String fileName,String keyWords){
int count=0;
File file = new File(fileName);
if(!file.exists()){
System.out.println("请检查文件的路径是否正确!\n");
return -2;
}
try{
FileInputStream in = new FileInputStream(file);
byte bts[] = new byte[in.available()];
StringBuffer buf = new StringBuffer();
while(in.read(bts)!=-1){
String str = new String(bts);
buf.append(str);
}
String bufStr=buf.toString();
while(bufStr.indexOf(keyWords)!=-1){
// System.out.println(bufStr.toString());
count++;
bufStr = bufStr.substring(bufStr.indexOf(keyWords)+1);
}
}catch(IOException ex){
System.out.println("读写文件时发生的异常!\n");
return -1;
}
return count;
}
}
package Demo;
import java.io.*;
/**
* 二进制文件的读写操作- 复制图片
*/
public class ImgData{
public static void main(String arg[])throws Exception{
//创建文件对象
File file = new File("123.gif");
//输入对象
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
//输出对象
FileOutputStream fos = new FileOutputStream("temp.jpg");
DataOutputStream dos = new DataOutputStream(fos);
//原始图片可读大小
System.out.println("原图片的可读大小为:"+fis.available()+" 个字节!");
System.out.println("图片复制中...请等待!");
int temp=0;
//读的时候同时写入另一个文件temp.jpg
while((temp=dis.read())!=-1){
dos.write(temp);
}
//显示的效果等待中
for(int i=0;i<11;i++){
Thread.sleep(20);
System.out.println("%"+i+"0 已经复制!");
}
System.out.println("已完成!");
}
}