创建路径或文件
方法:new File(路径,文件夹或文件)
1 2 3 4
| File folder = new File(rootPath,"src/data/weibo1"); if(!folder.exists()){ folder.mkdirs(); }
|
文件夹中创建文件
1
| File file = new File(folder, filename);
|
当然也可以一步到位,本人习惯这样,层次感强。
读写文件示例
见源代码
路径问题
在Java开发工具eclipse,myeclipse的project中使用相对路径
也就是说,在jar包或者cmd下无效。只在ide成立
项目结构:
1 2 3 4 5 6 7
| project ├─src │ └─com │ └─javasoft │ ├─entity │ └─db ├─doc
|
文件创建:
以“/”开头,指的是ide workspace所在磁盘的根目录
不以“/”开头,指的是project下子文件夹或者文件
1 2 3
| File f = new File("src/com/javasoft/db/a.txt"); //or File f = new File("doc/b.txt");
|
通过CLASSPATH读取包内文件
获取类路径下文件,也就是classes文件夹下文件,以“/”开头
1 2 3
| InputStream is = ReadFile.class.getResourceAsStream("/com/javasoft/db/a.txt"); //获取classes(classpath)路径 String classpath = getClass().getResource("/").getFile().toString();
|
获取类加载器下文件 不以“/”开头
1 2 3
| InputStream is=TestAction.class.getClassLoader().getResourceAsStream("com/javasoft/db/test.txt"); //获取classes(classpath)路径 String rootPath = FileUtil.class.getClassLoader().getResource("").getFile().toString();
|
可行的解决办法
absolutePath可以直接获取到项目路径
1 2 3
| String path = Thread.currentThread().getContextClassLoader().getResource("").getPath(); String secendPath = path.substring(1, path.lastIndexOf("/")); String absolutelyPath = secendPath.substring(0,secendPath.lastIndexOf("/"));
|
结果
1 2 3
| /D:/j2ee/m_workspace/LDA4j-master/target/test-classes/ D:/j2ee/m_workspace/LDA4j-master/target/test-classes D:/j2ee/m_workspace/LDA4j-master/target
|
总结
使用工程相对路径是靠不住的。
使用CLASSPATH路径是可靠的。
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| package com.your.package;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.RandomAccessFile;
public class TxtUtil { /** * 创建文件 * @param fileName * @return */ public static boolean createFile(File fileName)throws Exception{ boolean flag=false; try{ if(!fileName.exists()){ fileName.createNewFile(); flag=true; } }catch(Exception e){ e.printStackTrace(); } return flag; } /** * 读TXT文件内容 * @param fileName * @return */ public static String readTxtFile(File fileName)throws Exception{ String result=null; FileReader fileReader=null; BufferedReader bufferedReader=null; try{ fileReader=new FileReader(fileName); bufferedReader=new BufferedReader(fileReader); try{ String read=null; while((read=bufferedReader.readLine())!=null){ result=result+read+"\r\n"; } }catch(Exception e){ e.printStackTrace(); } }catch(Exception e){ e.printStackTrace(); }finally{ if(bufferedReader!=null){ bufferedReader.close(); } if(fileReader!=null){ fileReader.close(); } } System.out.println("读取出来的文件内容是:"+"\r\n"+result); return result; } public static boolean writeTxtFile(String content,File fileName)throws Exception{ RandomAccessFile mm=null; boolean flag=false; FileOutputStream o=null; try { o = new FileOutputStream(fileName); o.write(content.getBytes("UTF-8")); o.close(); // mm=new RandomAccessFile(fileName,"rw"); // mm.writeBytes(content); flag=true; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ if(mm!=null){ mm.close(); } } return flag; }
public static void contentToTxt(String filePath, String content) { String str = new String(); //原有txt内容 String s1 = new String();//内容更新 try { File f = new File(filePath); if (f.exists()) { System.out.print("文件存在"); } else { System.out.print("文件不存在"); f.createNewFile();// 不存在则创建 } BufferedReader input = new BufferedReader(new FileReader(f));
while ((str = input.readLine()) != null) { s1 += str + "\n"; } System.out.println(s1); input.close(); s1 += content;
BufferedWriter output = new BufferedWriter(new FileWriter(f)); output.write(s1); output.close(); } catch (Exception e) { e.printStackTrace();
} }
}
|