You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:05:23