一:问题
(1)java 的如果文件夹路径不存在,先创建;
(2)如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加
(3)File myPath = new File(toFilePath);
if ( !myPath.exists()){//若此目录不存在,则创建之// 这个东西只能简历一级文件夹,两级是无法建立的。。。。。 myPath.mkdir(); System.out.println("创建文件夹路径为:"+ toFilePath);} 如上代码只能创建一级目录,不能够创建二级目录;即只能创建当前级的目录,如果上一级目录还不存在,则创建失败;当然可以通过递归创建来解决这个问题File myPath = new File(toFilePath); 仅仅是把路径传递给了File.java类的私有属性,请看源代码,并没有打开文件,所以不会抛出FileNotFoundException
(4) //写入文件名处理
String fileN = toFilePath + "\\" + fileName;
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(fileN)));与下面的代码对比
File file=new File(originalPath);
if(file.isFile() && file.exists()){ //判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file),encoding);//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read);}
其实,FileWriter 是包装了(调用了) FileOutputStream()函数 源代码如下:所以两者有些类似的,只是stream可以过滤编码罢了
public FileWriter(File file) throws IOException { super(new FileOutputStream(file)); }
二:代码实现
- package edu.tju.cs;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.RandomAccessFile;
- public class AllTest {
- /*public static void main(String[] args){
- System.out.println("****\\\\");
- String str = "a\\b\\b\\c.csv|aaaaa";
- String[] chars = str.split("\\\\");
- String[] fileName = chars[3].split("\\.");// u002e
- String[] tmp = chars[3].split("\\u007c");// \\u007c
- for(String cha:chars){
- System.out.println(cha);
- }
- System.out.println(fileName[0]);
- System.out.println(tmp[1]);
- }*/
- public static void main(String args[])
- {
- StringBuffer fileBuf=new StringBuffer();
- String filePar = "d:\\test";// 文件夹路径
- File myPath = new File( filePar );
- if ( !myPath.exists()){ //若此目录不存在,则创建之
- myPath.mkdir();
- System.out.println("创建文件夹路径为:"+ filePar);
- }
- // 文件夹路径存在的情况下
- String filename = "test.txt";// 文件名
- try {
- FileWriter fw = new FileWriter(filePar + "\\" + filename,true);// filePar + "\\" + filename,true
- // FileWriter 就是牛,如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加
- String originalLine = "aaaaaaaaaa" + "\n";//
- System.out.println("*** "+ originalLine);
- fw.write(originalLine);
- // 关闭写文件,每次仅仅写一行数据,因为一个读文件中仅仅一个唯一的od
- fw.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
package edu.tju.cs;import java.io.File;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.RandomAccessFile;public class AllTest { /*public static void main(String[] args){ System.out.println("****\\\\"); String str = "a\\b\\b\\c.csv|aaaaa"; String[] chars = str.split("\\\\"); String[] fileName = chars[3].split("\\.");// u002e String[] tmp = chars[3].split("\\u007c");// \\u007c for(String cha:chars){ System.out.println(cha); } System.out.println(fileName[0]); System.out.println(tmp[1]); }*/ public static void main(String args[]) { StringBuffer fileBuf=new StringBuffer(); String filePar = "d:\\test";// 文件夹路径 File myPath = new File( filePar ); if ( !myPath.exists()){//若此目录不存在,则创建之 myPath.mkdir(); System.out.println("创建文件夹路径为:"+ filePar); } // 文件夹路径存在的情况下 String filename = "test.txt";// 文件名 try { FileWriter fw = new FileWriter(filePar + "\\" + filename,true);// filePar + "\\" + filename,true // FileWriter 就是牛,如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 String originalLine = "aaaaaaaaaa" + "\n";// System.out.println("*** "+ originalLine); fw.write(originalLine); // 关闭写文件,每次仅仅写一行数据,因为一个读文件中仅仅一个唯一的od fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}总之, FileWriter 就是牛,如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 但是他只能一行一行的读写,不如代缓冲的读写效率高
请见: