如果标题让人困惑,很抱歉。问题是,我基本上需要把我的java程序放在一张CD上交给一个模块,我想知道如何设置目录,这样它就可以在没有"C:\/Users/Haf/Desktop/test.txt"的情况下工作
package javaapplication2;
import java.io.*;
import javax.swing.JOptionPane;
/**
*
* @author Haf
*/
public class FileClass {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
// TODO code application logic here
String file_name = "C://Users/Haf/Desktop/test.txt";
try {
ReadFile file = new ReadFile(file_name);
String [] aryLines = file.OpenFile();
int i;
for (i=0; i < aryLines.length; i++) {
System.out.println(aryLines[i]);
}
}
catch (IOException e) {
System.out.println(e.getMessage () );
}
}
}
package javaapplication2;
import java.io.*;
public class ReadFile { //creating a constructor
private String path;
public ReadFile(String file_path) {
path = file_path;
}
public String[] OpenFile() throws IOException { //returning a string array. You need to use IOException
FileReader fr = new FileReader (path); //creating FileReader obj called fr
BufferedReader textReader = new BufferedReader(fr); //bufferedreader obj
int numberOfLines = readLines();
String [] textData = new String[numberOfLines]; //array length set by numberOfLines
int i;
for (i = 0; i < numberOfLines; i++) {
textData[i] = textReader.readLine();
}
textReader.close();
return textData;
}
int readLines() throws IOException {
FileReader file_to_read = new FileReader(path);
BufferedReader bf = new BufferedReader (file_to_read);
String aLine;
int numberOfLines = 0;
while (( aLine = bf.readLine()) !=null) {
numberOfLines++;
}
bf.close();
return numberOfLines;
}
}
你可以做两件事。
1) 如果文件需要由用户提供,请将该位置作为参数。如果您希望应用程序在没有用户输入的情况下失败,也可以使用这种方法。
public static void main(String... args) {
String location = args[0];
... // Do Stuff
}
2) 如果文件是静态的,请将其打包到您的jar中,并将其作为资源读取。
public static void main(String... args) {
InputStream input = FileClass.getClass().getClassLoader().getResourceAsStream("test.txt")
... // Do Stuff
}
当它是一个属性文件时,我更喜欢两者的结合。定义默认属性并打包它们。然后,允许用户通过提供自己的属性来覆盖这些值。从类路径加载属性(示例二),然后替换用户提供的文件中的任何值(示例一)。