资产文件目录给出java.io.FileNotFoundException eclipse

时间:2015-12-30 00:40:27

标签: java android eclipse excel android-emulator

我的资源文件夹中有一个xls文件,我想使用jexcelapi库打开它。我已将文件的路径设置为(" file:///android_asset/jxlrwtest.xls"),甚至尝试使用New->在我的根文件夹中创建一个具有不同名称的xls文件。文件并直接访问它但仍然得到错误java.io.FileNotFoundException"(没有这样的文件或目录)"每次我运行模拟器。我还确保每次尝试移动文件时都刷新路径。我读完excel文件的全班都是

package com.example.kirikedictionary;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class ReadExcel {

  private String inputFile;
  protected Context context;

  public ReadExcel(Context context){
      this.context = context.getApplicationContext();
  }


  public void setInputFile(String inputFile) {
    this.inputFile = inputFile;
  }

  public void read() throws IOException  {
    File inputWorkbook = new File(inputFile);
    Workbook w;
    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();
          if (type == CellType.LABEL) {
            System.out.println("I got a label "
                + cell.getContents());
          }

          if (type == CellType.NUMBER) {
            System.out.println("I got a number "
                + cell.getContents());
          }

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

  public void main(String[] args) throws IOException {
    ReadExcel test = new ReadExcel(context);
    test.setInputFile("file:///android_asset/jxlrwtest.xls");
    test.read();
  }

} 

和我一直得到的错误是

  

12-30 01:36:59.386:W / System.err(1851):java.io.FileNotFoundException:   file:/android_asset/jxlrwtest.xls:open failed:ENOENT(没有这样的文件   或目录)12-30 01:36:59.393:W / System.err(1851):at   libcore.io.IoBridge.open(IoBridge.java:456)12-30 01:36:59.393:   W / System.err(1851):at   java.io.FileInputStream。(FileInputStream.java:76)12-30   01:36:59.394:W / System.err(1851):at   jxl.Workbook.getWorkbook(Workbook.java:213)12-30 01:36:59.394:   W / System.err(1851):at jxl.Workbook.getWorkbook(Workbook.java:198)   12-30 01:36:59.394:W / System.err(1851):at   com.example.kirikedictionary.ReadExcel.read(ReadExcel.java:33)12-30   01:36:59.394:W / System.err(1851):at   com.example.kirikedictionary.ReadExcel.main(ReadExcel.java:62)12-30   01:36:59.394:W / System.err(1851):at   com.example.kirikedictionary.MainActivity $ 3.onItemClick(MainActivity.java:148)   12-30 01:36:59.394:W / System.err(1851):at   android.widget.AdapterView.performItemClick(AdapterView.java:300)   12-30 01:36:59.395:W / System.err(1851):at   android.widget.AbsListView.performItemClick(AbsListView.java:1143)   12-30 01:36:59.416:W / System.err(1851):at   android.widget.AbsListView $ PerformClick.run(AbsListView.java:3044)   12-30 01:36:59.416:W / System.err(1851):at   android.widget.AbsListView $ 3.run(AbsListView.java:3833)12-30   01:36:59.416:W / System.err(1851):at   android.os.Handler.handleCallback(Handler.java:739)12-30   01:36:59.417:W / System.err(1851):at   android.os.Handler.dispatchMessage(Handler.java:95)12-30   01:36:59.432:W / System.err(1851):at   android.os.Looper.loop(Looper.java:135)12-30 01:36:59.432:   W / System.err(1851):at   android.app.ActivityThread.main(ActivityThread.java:5221)12-30   01:36:59.432:W / System.err(1851):at   java.lang.reflect.Method.invoke(Native Method)12-30 01:36:59.432:   W / System.err(1851):at   java.lang.reflect.Method.invoke(Method.java:372)12-30 01:36:59.433:   W / System.err(1851):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)   12-30 01:36:59.433:W / System.err(1851):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)12-30   01:36:59.433:W / System.err(1851):引起:   android.system.ErrnoException:open failed:ENOENT(没有这样的文件或   目录)12-30 01:36:59.434:W / System.err(1851):at   libcore.io.Posix.open(Native Method)12-30 01:36:59.435:   W / System.err(1851):at   libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)12-30   01:36:59.451:W / System.err(1851):at   libcore.io.IoBridge.open(IoBridge.java:442)12-30 01:36:59.452:   W / System.err(1851):... 18更多

请帮忙,因为我不想使用外部SD卡文件而且我已经被困在这里一段时间了。

1 个答案:

答案 0 :(得分:5)

您只能将file:/// android_asset / someName用作WebView的URL。 它不是文件系统识别的文件名。

使用Context.getAssets获取AssetManger实例,并使用AssetManager.open获取资产文件的InputStream。

如果您需要提供File实例,请将资产中的文件复制到应用程序的私人目录中。