我正在尝试引用存储在我的工作目录中的文件,因此可以使用开源例程'opencsv'读入和解析它。
以下行给出了FileNotFoundException错误:
CSVReader reader = new CSVReader(new FileReader("file.csv"), '\t');
我使用以下方法检查了工作目录:
String curDir = System.getProperty("user.dir");
这将返回值'\',因此我将文件'file.csv'放在项目的根目录中。我正在使用Eclipse。有问题的文件不是只读文件,设置为“存档”并且未标记为“已导出”。
我可能很明显是Java新手。在Google上搜索此问题表明我需要更改我的文件权限,但我想知道我是否遗漏了其他内容。我知道解决方案可能非常明显:S
以下是完整的代码:
package mjd.listview.test;
import java.io.FileReader;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import au.com.bytecode.opencsv.CSVReader;
public class ListProjectActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CSVReader reader = new CSVReader(new FileReader("file.csv"), '\t');
List<String[]> myEntries = reader.readAll();
String[] terms = getResources().getStringArray(R.array.terms_array);
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, terms));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}
}
答案 0 :(得分:1)
要查找工作目录,请不要使用System.getProperty("user.directory")
。使用new File(".").getCanonicalPath()
。这将打印当前工作目录的规范(绝对和唯一)路径。
答案 1 :(得分:0)
不要假设项目的根目录等同于\
。如果是的话,我会感到惊讶。 FileNotFoundException
中报告的实际路径是什么?那将告诉你Java在哪里寻找文件。
我使用IntelliJ而不是Eclipse,但在IntelliJ中有一个运行配置屏幕,您可以在其中设置JVM参数,命令行参数和工作目录。我认为Eclipse有类似的东西。看看它的设定。然后将其更改为实际拥有文件的位置或将文件移动到它设置的位置。