少年游

欲买桂花同载酒,终不似,少年游。

0%

java文件写入项目根目录

创建路径或文件

方法: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();

}
}

}