如何在android应用程序中读取大型excel文件?

如何在android应用程序中读取大型excel文件?,android,excel,file,inputstream,Android,Excel,File,Inputstream,“我的应用程序”将上传的excel文件中的数据保存在文件室中,然后(由用户)在选定列中搜索关键字,然后显示包含该关键字的单元格的所有行 它成功地读取了小的Excel文件,但如果我在这一行上传的文件超过2MB,它就会卡住 Workbook myWorkBook = WorkbookFactory.create(inputStream); 这个错误的详细信息 java.lang.OutOfMemoryError Failed to allocate a 40 byte allocation wi

“我的应用程序”将上传的excel文件中的数据保存在文件室中,然后(由用户)在选定列中搜索关键字,然后显示包含该关键字的单元格的所有行

它成功地读取了小的Excel文件,但如果我在这一行上传的文件超过2MB,它就会卡住

Workbook myWorkBook = WorkbookFactory.create(inputStream);
这个错误的详细信息

 java.lang.OutOfMemoryError
Failed to allocate a 40 byte allocation with 32 free bytes and 32B until OOM, max allowed footprint 402653184, growth limit 402653184
我按照这个来编码


尝试逐行阅读:

InputStreamReader inputStreamReader =  new InputStreamReader(inputStream, StandardCharsets.UTF_8);
                        reader = new BufferedReader(inputStreamReader);
                        String line = null; 
                        while((line = reader.readLine())!= null){
                            Log.d(APP_LOGS, line);
                        }
但结果是:

PK��$��O������������������������������xl/worksheets/sheet1.xml��ێ�F�� C��-̠۫U�"�h�M�h�h�F
D: >���ڞ�r3������s!��|��s���T�u��wY&*��������'�:u�i��Rnݟ�v��~�\�~��R6N+P�[��4�����(��^�J�핽�Eܴ���Օ�q�
D: ��>�8+�^a�!j����TȲ�E��㦍_���P+��\�%Z�j߬UJm�ē�Dv��,P�@�~?UO�dզx�����22�{��z�x21n3��}.��+"��������"�����!��"�}/���(0Cdx��6���m�� ��͏�U{��g���ߙ�ԓc��6}S��v�-ݺ�k���_;���INu���dv86�:�N*��)o^T�O�6ǶFV��wu1�tթ'*�����ǜ�Yٿ�����_�
D: ��G�a$0��#x��@|:B�bF0[!��f�Ħ������(n��F���o������V��ڛW�����x������w�4�x�;�yG�w�I6^��L��!]3��/V�`}��M��/�^��W�Ir?6�<�3��%�<_�������'���D�$"�D�o%"˻B>�@��~j2�Y���2ò��nf.̸��F�[�,{��p���%\�,Q���>w��.�B��"f."���tY"����ß�P�gh�Y�h�ܱ�<��܊[�<�L���h�ܱ7�< ߌ=#�cU��rGz|� lKcKzY�����q��-m=���J4T�H�[��-m��U�У�F�j#fK[�lU"�h�Ѹ�(���
D: �*z��h\b�mikm�J�-.7�k��Dz(m�}�������Q�"Y~������ڈ���H���B9�Q���m���P2JC�`(%��d0���!P2J�@�(%C����!P2J�B�P(
D: %C�d(����P2J�B�P(%àd���aP2J�A�0(%àdB(�J&��   �dB(�J&��   �dB(�J�C�p(%ád8����P2J�C�p(%#�d����P2JF@(%#�d���h��ח���揪���뿆�=և���7մ�[��t�J5R��n�2N�I.�M��:�w�U
D: ���z�T9Jg�l�_6�n�i�ĕ���:�d����,ݺ�[ڇ5?���PK<�r�����������PK��$��O������������������������#������xl/worksheets/_rels/sheet1.xml.rels��M��0������Y���t[�[���m,��޾^t`
D: ]�RO����,��q�)x��@���M~0p�7[P��;��gwط͉g��F�)�*�c�q�(v�D�Ⱦl���eLF�?���_�S��tt5���?v����!���>�y�.�Z����ـֿ���EF��Lj]|������PK�j�������3����PK��$��O������������������������!������xl/drawings/worksheetdrawing1.xml��]n�0��U�iZC^�N0�%n�����~�J6i{m�?���nt��Db|#�z��]#�o��(8��`��F\��n��5�ϼ�"�{^��}��ZJV=:�2�Ӵ
D: � ��:�   �IvVΫ�E��{ĸ�&�������Mׄ�5
D: �A��8!�b��f଩�Q=P���3��6�*��)�HB�<    8����R���_���O�,�Czȇ�&^��eFwh��ȸ8��ݱ*�6�(+l�^ޭ̳"�_PKbi���������PK��$��O������������������������������docProps/app.xml�RAn�0|A� �SJ��0(��"�5`'=o��E�"   �V���R2��
D: z�m83��+Ld��E�*E�ބ��C-��_n>��|.x��  I��wj�B���� �j�1ǵ�d:�VY�YiC��1dh[k�!�_=z��ey'���ln�(Ή��7�   f�G��S�yZmB���V;7Y�-8B%_    ��0�{6�V�4R�ǤZ�,x�#����V�mgv�.'�#����\� ^z/����ɐ��Q.E2����쐾�[H�����s�J\t܍��7�����j�=�}x���yvפ�u���_��v!�cn����t��̞�����8���fM
D: Z.>
D: :%/���|�]]ݭ��e9fN��5���PK���k���������PK��$��O������������������������������docProps/core.xml���n�0��`�@zm����&n�j&K�ewM9h3Z��y�T������ے-����:��ф�hJ��9zݬ�9����u�!G8�(�2a�h,<�ƀ�\D�1ar���0��؁�.  �a�X�}x�[l���[�BfX��%���،FtR�bT���A)0Ԡ@{�iB���*ws��\�J���M�����l�6i�
D: �)~_?�[���J��*�S&,pe�8���*&��ǔ�$ݐ9#)��>2�g}/<>7�X�Ø�G�plm׳c��K͝_��$��&Ʋ����m�,�^�=�a����PK�V}�6����l����PK��$��O������������������������������xl/theme/theme1.xml�Yˎ�6�����D�-�1�'�3i3��I�,i��S�@R3c�d�M�i�M��(�h���cHЦQ�a���$m�>���X$Ͻ<��<W�\�rp��4�Z�K�P����'a׺s2�k[����u�9�֕��.�}�i��}ص"!�}����MQ"Ǧ��P�&��3�6&v�q�vqbU��u��t�}4�~�D�N"PH�<�)�@c��f'9A�`AuDPn����c��Z�`V���r!��S|,p
D: Iג�� :�}p�^a�Ͷ���Y��c�$7,p����������F�Qs���@ߗ+�m`�~�?�*�*/
PK��$��O������������������������������xl/worksheets/sheet1.xml��ێ�F�� C��-̠۫U�"�H�M�H�H�F
D:>���ڞ�r3������s��|��s���T�U��wY&*��������'�:U�我��Rnݟ�v��~�\�~��R6N+P�[��4.�����(��^�J�핽�Eܴ���Օ�Q�
D:��>�8+�^A.�!J����Ȳ�E��㦍_���P+��\�%Z�j߬UJm�ē�Dv��,P�@�~?UO�迪克斯�����22�{��Z�x21n3��}.��+"��������"�����!��"�}/���(0Cdx��6.���M�� ��͏�U{��G���ߙ�ԓc��6} ��v�-ݺ�K���_;���伊努���dv86�:�N*��)奥特�O�6ǶFV��wu1�tթ*�����ǜ�Yٿ�����_�

D:��G�a$0��#x��@|:B�bF0[!��F�Ħ������(n)��F���o������v��ڛW�����x������W�4.�x�;�yG�W�I6^��L��!]3.��/v�`}��M��/�^��W�Ir?6� 尝试添加
android:largeHeap=“true"但是,如果这是一个向用户分发的应用程序,你应该考虑其他方法。大多数人不会欣赏你的应用程序占用了他们所有设备的内存。最好是使用基于服务器的解决方案来解析文件,让查询只需要它需要删除的数据。显示结果。

检查库以解析大型xlsx文件。完整文档为

加上

repositories {
        maven {
            url "https://jitpack.io"
        }
    }

到您的应用程序级渐变文件

你可以用它和

InputStream is = new FileInputStream(new File("/path/to/workbook.xlsx"));
Workbook workbook = StreamingReader.builder()
        .rowCacheSize(100)    // number of rows to keep in memory (defaults to 10)
        .bufferSize(4096)     // buffer size to use when reading InputStream to file (defaults to 1024)
        .open(is);            // InputStream or File for XLSX file (required)

很可能无法解决。你的应用程序正在尝试使用400MB的堆空间。你在许多设备上都无法做到这一点。请与你正在使用的任何库的开发人员交谈,看看他们是否有任何减少堆使用的选项。然后你正在使用。介绍如何获得使用该库的帮助。首先,这是n一个教程!第二,它已经4年了。小心,它听起来真的很粗糙和混乱。它基本上是来自一个不安全的网站的指令,将大量你不知道的代码复制到你的项目中。为了绕过65k方法的限制。现在你无论如何都不会将大量的libs复制到你的项目中,你只需导入em通过maven或类似软件。@Commonware谢谢,我会检查您是否可以尝试此功能。我已经添加了此功能,但尚未解决此问题。您能否解释更多关于“基于服务器的解决方案”的信息,请?谢谢如果它仍然不工作,那是因为您的Excel文件太大。基于服务器的解决方案将有一个解析xml文件的服务器,应用程序将连接到该服务器并只请求它所需的数据。很难给出详细信息,因为您没有说明如何使用此Excel文件。当然,但这并没有告诉我有关您的Excel文件的任何信息。这些文件是用户选择用于转换的,还是您可以控制的?文件中有什么类型的数据,以及您如何显示这些数据?在搜索完后(由用户)将上传的Excel文件中的数据保存在房间中的选定列中对于关键字,则显示包含该关键字的单元格的所有行。然后,您的服务器应允许上载Excel,将数据保存到数据库,并且应用程序应能够使用搜索查询在服务器上查询数据。如果有大量数据,请使用分页来限制请求的数据量
InputStream is = new FileInputStream(new File("/path/to/workbook.xlsx"));
Workbook workbook = StreamingReader.builder()
        .rowCacheSize(100)    // number of rows to keep in memory (defaults to 10)
        .bufferSize(4096)     // buffer size to use when reading InputStream to file (defaults to 1024)
        .open(is);            // InputStream or File for XLSX file (required)