尝试在android中读取xls时出现FileNotFoundException

时间:2012-06-02 12:15:35

标签: android excel

我正在尝试在android中读取excel内容,但总是得到文件未找到异常 该项目位于:

C:\AndroidWorkSpace\AntenaProject

代码是:

public void TestClick(View view)
{
    File inputWorkbook = new File("shidur.xls");
    Workbook w;
    StringBuilder sb = new StringBuilder("starting");
    try {

        w = Workbook.getWorkbook(inputWorkbook);
        // Get the first sheet
        Sheet sheet = w.getSheet(0);
        // Loop over first 10 column and lines

        for (int j = 0; j < sheet.getColumns(); j++) {
            for (int i = 0; i < sheet.getRows(); i++) {
                Cell cell = sheet.getCell(j, i);
                //CellType type = cell.getType();

                sb.append(cell.getContents());



            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }


    TextView tv = (TextView)findViewById(R.id.testText);
    tv.setText(sb.toString());


}

我试图将shidur.xls放在以下文件夹中:

C:\AndroidWorkSpace\AntenaProject\res\raw
C:\AndroidWorkSpace\AntenaProject\res

但仍然遇到此异常。 我正在使用http://jexcelapi.sourceforge.net/中的jxl.jar 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

您提供给File构造函数的路径需要是文件的绝对路径,或者您需要使用将另一个File对象作为表示该文件所在目录的第一个参数的重载。

话虽这么说,以这种方式构建文件是针对本地存储(即手机的主存储器)或外部存储(即SD卡)的文件。

要从res / raw目录打开文件,请按以下方式获取InputStream

    InputStream in = getResources().openRawResource(R.raw.file_name);

然后,您将需要读取输入流内容的代码。我使用一个看起来像这样的静态帮助器方法,但如果文件很大,这个可以让你遇到问题。还没有发生在我身上,但原则上,当将文件的整个内容加载到内存中时总是存在风险

public static String readStream(InputStream in)
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuilder sb = new StringBuilder();
    String line = null;
    try
    {
        while((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }
    }
    catch(Exception ex) { }
    finally
    {
        // NOTE: you don't have my IOUtils class, 
        // but all these methods do is check for null and catch the exceptions that Closeable.close() can throw
        IOUtils.safeClose(in);
        IOUtils.safeClose(reader);
    }
    return sb.toString();
}

答案 1 :(得分:0)

您应该使用以下代码在/ res / raw

中打开文件
getResources().openRawResource(R.raw.shidur.xls)