Android Studio Java读取下载文件夹Excel文件遇IO异常求助
Android读取Excel文件时触发IO异常问题
我正在开发一款Android App,功能是读取下载文件夹中的Excel文件,搜索特定关键词并统计出现次数,最终展示关键词及对应次数。我对编程了解有限,这个问题已经困扰我4周了,开发这款App是为了提升工作效率。
当前遇到的问题:在FetchFromFile()方法中,第一个Toast可以正常显示,但执行到new FileInputStream(file)时触发IO异常,无法执行后续代码。我已经尝试过Stack Overflow上的多种解决方案,但问题仍未解决。
以下是我的完整代码,还有App获取到的文件Uri和路径截图:
MainActivity代码
public class MainActivity extends AppCompatActivity { // Initialize variable Button btSelect; TextView tvUri; TextView tvPath; ActivityResultLauncher<Intent> resultLauncher; String nimi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // assign variable btSelect = findViewById(R.id.bt_select); tvUri = findViewById(R.id.tv_uri); tvPath = findViewById(R.id.tv_path); // Initialize result launcher resultLauncher = registerForActivityResult( new ActivityResultContracts .StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult( ActivityResult result) { // Initialize result data Intent data = result.getData(); // check condition if (data != null) { // When data is not equal to empty // Get PDf uri Uri sUri = data.getData(); // set Uri on text view tvUri.setText(Html.fromHtml( "<big><b>PDF Uri</b></big><br>" + sUri)); // Get PDF path String sPath = sUri.getPath(); // Set path on text view tvPath.setText(Html.fromHtml( "<big><b>PDF Path</b></big><br>" + sPath)); nimi = String.valueOf(sUri); try { FetchFromFile(); } catch (IOException e) { e.printStackTrace(); } } } }); // Set click listener on button btSelect.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // check condition if (ActivityCompat.checkSelfPermission( MainActivity.this, Manifest.permission .READ_EXTERNAL_STORAGE) != PackageManager .PERMISSION_GRANTED) { // When permission is not granted // Result permission ActivityCompat.requestPermissions( MainActivity.this, new String[] { Manifest.permission .READ_EXTERNAL_STORAGE }, 1); } else { // When permission is granted // Create method selectFile(); } } }); } private void selectFile() { // Initialize intent Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // set type intent.setType("*/*"); // Launch intent resultLauncher.launch(intent); } @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult( requestCode, permissions, grantResults); // check condition if (requestCode == 1 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // When permission is granted // Call method selectFile(); } else { // When permission is denied // Display toast Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show(); } }
FetchFromFile方法代码
public void FetchFromFile() throws IOException { File file = new File(nimi); FileInputStream fileInputStream; Toast.makeText(getApplicationContext(), "Prints this TOAST", Toast.LENGTH_SHORT).show(); fileInputStream = new FileInputStream(file); Toast.makeText(getApplicationContext(), "Does not print this TOAST", Toast.LENGTH_SHORT).show(); XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream); XSSFSheet sheet = workbook.getSheetAt(0); XSSFRow row = sheet.getRow(1); XSSFCell cell = row.getCell(1); } }
内容的提问来源于stack exchange,提问作者enn
相关产品推荐
相关产品推荐

