[英]how to open an excel file from assets folder
我正在尝试使用excel库从资产文件夹中打开excel文件,但是应用程序崩溃了,我设法将两个代码彼此结合在一起,这就是为什么它无法正常工作的原因。 有什么帮助吗? 谢谢。
public class MainActivity extends Activity {
Button open;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
open=(Button)findViewById(R.id.button1);
open.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
File file = new File("file:///android_asset/data.xlsx");
try {
Workbook workbook = Workbook.getWorkbook(file);
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = MimeTypeMap.getFileExtensionFromUrl(file.getName());
String type = map.getMimeTypeFromExtension(ext);
if (type == null)
type = "*/*";
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.fromFile(file);
intent.setDataAndType(data, type);
startActivity(intent);
}
});
错误
04-30 15:22:54.642: E/AndroidRuntime(22148): FATAL EXCEPTION: main
04-30 15:22:54.642: E/AndroidRuntime(22148): Process: com.ecxel, PID: 22148
04-30 15:22:54.642: E/AndroidRuntime(22148): java.lang.VerifyError: com/ecxel/MainActivity$1
04-30 15:22:54.642: E/AndroidRuntime(22148): at com.ecxel.MainActivity.onCreate(MainActivity.java:29)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.Activity.performCreate(Activity.java:5312)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.ActivityThread.access$800(ActivityThread.java:156)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.os.Handler.dispatchMessage(Handler.java:102)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.os.Looper.loop(Looper.java:157)
04-30 15:22:54.642: E/AndroidRuntime(22148): at android.app.ActivityThread.main(ActivityThread.java:5872)
04-30 15:22:54.642: E/AndroidRuntime(22148): at java.lang.reflect.Method.invokeNative(Native Method)
04-30 15:22:54.642: E/AndroidRuntime(22148): at java.lang.reflect.Method.invoke(Method.java:515)
04-30 15:22:54.642: E/AndroidRuntime(22148): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
04-30 15:22:54.642: E/AndroidRuntime(22148): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
new File("file:///android_asset/data.xlsx")
将不起作用。 资产不是文件; 它们只是您的APK文件ZIP存档中的条目。
如果您的库接受InputStream
作为加载电子表格的源,请使用getResources().getAssets().open("data.xlsx")
在电子表格上获取此类InputStream
。 否则,您将需要将该文件从资产复制到内部存储,以便可以将实际File
提供给库。
您可以这样尝试。
File file = new File(m.getInstrumentation().getContext().getExternalFilesDir(null), filename);
FileInputStream fis = new FileInputStream(file);
要么
您可以尝试像这样的代码。 如
public class ReadFileAssetsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView txtContent = (TextView) findViewById(R.id.txtContent);
TextView txtFileName = (TextView) findViewById(R.id.txtFileName);
ImageView imgAssets = (ImageView) findViewById(R.id.imgAssets);
AssetManager assetManager = getAssets();
// To get names of all files inside the "Files" folder
try {
String[] files = assetManager.list("Files");
for(int i=0; i<files.length; i++) { txtFileName.append("\n File :"+i+" Name => "+files[i]);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// To load text file
InputStream input;
try {
input = assetManager.open("helloworld.txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
// byte buffer into a string
String text = new String(buffer);
txtContent.setText(text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// To load image
try {
// get input stream
InputStream ims = assetManager.open("android_logo_small.jpg");
// create drawable from stream
Drawable d = Drawable.createFromStream(ims, null);
// set the drawable to imageview
imgAssets.setImageDrawable(d);
}
catch(IOException ex) {
return;
}
}
}
如果您对以上代码有任何疑问。 请按照此方法如何从Assets文件夹读取文件(图像或文本文件)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.