java创建本地文件并读取文件

java功能强大,可以直接或间接与操作系统打“交道”。例如在本地创建文件,并读取文件,其实与本地写log日志是一样的道理。

接下来就是使用java来实现创建本地文件,并读取本地文件,废话就不多说了,直接上代码。

package localfile;

import java.io.*;
import java.util.Properties;

public class MichaelMakeNativeFile {
    private static Properties base;
    private static File pFile = null;
    private static long iniModifyTime = 0;
    private static String currentUrl;

    //static生命周期与类实例化一致
    static {
        currentUrl = System.getProperty( "user.dir" ) + "\\";
        System.out.println("当前项目的完整路径(只到项目文件夹名,不包括包名):"+currentUrl);
        //1)创建文件
        pFile = new File( currentUrl + "config\\michael.txt" );
        iniModifyTime = pFile.lastModified();
        //操作键值对
        base = new Properties();
        //++++++++++++++++++++++++++++++++++++文件夹和文件++++++++++++++++++++++++++++++++++++
        try {
            //如果不存在该文件,则创建新的文件,并写入新的默认值
            if(!pFile.exists()){
                createFile("config","michael.txt");
                //2)写入文件
                fileWrite("name","michael.pan");
                fileWrite("age","20");
            }
            //+++++++++++++++++++++++++++++++++++++++++
            //Properties需要加载FileReader才能读取File文件的值!!!
            FileReader reader = new FileReader( pFile );
            base.load( reader );
            //+++++++++++++++++++++++++++++++++++++++++
            //3)读取文件
            // readFile(pFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    }
    //创建文件夹和文件
    private static void createFile(String fileDir,String fileName){
        try {
            //1)生成文件file
            String property = System.getProperty("user.dir");//当前项目路径
            String pathName = property + "\\"+fileDir+"\\"+fileName;
            //**************************************************************************************
            pFile = new File(pathName);
            //记录最后修改的时间
            iniModifyTime = pFile.lastModified();
            pFile.getParentFile().mkdir();//根据java内容创建的File文件,调用mkdir()在本地文件上创建对应的文件夹
            pFile.createNewFile();//根据java内容创建的File文件,调用createNewFile在本地文件上创建对应的文件,如pcq.ini
            //**************************************************************************************
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //使用FileOutputStream的写入本地文件
    private static void writeFile(File file,String writeContent){
        FileOutputStream fileOutputStream = null;
        try {
            //2)写入文件,两种文件输出形式FileOutputStream和FileWriter。
            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write(writeContent.getBytes());
            //在关闭流之前,将遗留在缓存区的流冲刷出来,避免数据丢失
            fileOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭流
                assert fileOutputStream != null;
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //使用FileWriter的写入方式
    private static void fileWrite(String key,String value){
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(pFile);
            //设置key:value键值对
            base.setProperty(key,value);
            //保存键值对
            base.store(fileWriter,"");
            // fileWriter.write(writeContent);
            fileWriter.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                assert fileWriter != null;
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //从本地读文件
    private static String readFile(File file){
        StringBuilder stringBuilder = null;
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(file);
            //3)读取本地文件的内容 //read(ch)一次最多读5个字符,返回值最大为5。不足5时,返回对应的字符数
            char[] chars = new char[5];
            //+++++++++++++++++++++++++++读取方式一
            //数据对的读入
            // int data;
            // while ((data = fileReader.read()) != -1){read()返回值为-1时,表示读文件到末尾;其他值都是相应的字符对应的数字
            //     System.out.println((char)data);
            // }
            //***************************方式一结束
            int len;
            stringBuilder = new StringBuilder();
            String str = null;
            //返回值为-1时,表示读文件到末尾
            while ((len = fileReader.read(chars)) != -1){
                //转换的数据是从ch数组中的[0,len)获得
                str = new String(chars, 0, len);
                stringBuilder.append(str);
            }
            System.out.println("FileReader读取的内容:"+stringBuilder.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                assert fileReader != null;
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return stringBuilder.toString();
    }
    //读取properties文件
    private static String readProperties( String key){
        if(iniModifyTime != pFile.lastModified()){
            reloadFile();
            iniModifyTime = pFile.lastModified();
        }
        return base.getProperty(key);
    }
    //重新加载文件,则就需要重新在Properties里面加载FileReader,每次刷新都要重新创建新的对象
    private static void reloadFile(){
        FileReader fileReader = null;
        try {
            fileReader = new FileReader(pFile);
            base = new Properties();
            base.load(fileReader);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                assert fileReader != null;
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        new MichaelMakeNativeFile();
        fileWrite("name2","中文");
        fileWrite("name","michael.pan");
        fileWrite("age","20");
        System.out.println(readProperties( "name"));
        System.out.println(readProperties( "age"));
        System.out.println(readProperties( "sex"));
        System.out.println(readProperties("classroom"));
        System.out.println(readProperties( "name2"));
        System.out.println(readProperties( "score"));
    }
}

提示:直接将代码粘贴到开发环境中即可运行使用,希望对您有帮助,谢谢!