【问题标题】:Loading text file data加载文本文件数据
【发布时间】:2018-01-30 14:27:40
【问题描述】:

我在读取应用程序创建的文本文件时遇到问题。我的应用程序生成一个文本文件,其中包含每一行中一个字段的数据,但即使有 BufferedReader 和 StringBuilder 的答案,我也无法在许多组合中很好地处理它。加载按钮应该加载文件的名称(确实如此)并在指定的字段(TextView)中写入数据。为什么它不起作用?一开始我认为这是 StringBuilder 的问题,因为他向我展示了一个错误,即没有从他那里读取数据,所以我让他不再产生这个错误,但仍然没有。

onActivityResult:

@Override
public void onActivityResult(int reqCode, int resCode, Intent Data) {

    super.onActivityResult(reqCode, resCode, Data);

    if (reqCode == reqGaleria) {

        if (resCode == RESULT_OK) {

            try {

                Uri imageUri = Data.getData();
                InputStream imageStream = getContentResolver().openInputStream(imageUri);
                Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                ramka.setImageBitmap(selectedImage);
                sciezka = imageUri.getPath();

            } catch (FileNotFoundException e) {

                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Coś poszło nie tak", LENGTH_SHORT)
                        .show();
            }
        } else {
            Toast.makeText(getApplicationContext(), "Nie wybrałeś obrazu", LENGTH_SHORT).show();
        }
    }

    if (reqCode == reqLoad) {

        if (resCode == RESULT_OK) {

            try {

                Uri plik = Data.getData();
                @SuppressLint("Recycle") Cursor kursor = getContentResolver().query(plik, null, null, null, null);

                int nazwa_i = kursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
                kursor.moveToFirst();//Musi zostać - bez tego nie wyskoczy nazwa pliku
                wczytaj.setText(kursor.getString(nazwa_i));

                FileReader test = new FileReader(String.valueOf(wczytaj));
                BufferedReader bufor_w = new BufferedReader(test);
                String line;
                line = bufor_w.readLine();
                StringBuilder bob = new StringBuilder(line);

                i_e_magazyn.setText(bob);

                bob.append('\n');

                i_e_strefa.setText(bob);

                bufor_w.close();
                kursor.close();

            } catch (Exception e) {

                e.printStackTrace();
                Toast.makeText(getApplicationContext(),"Problem z uruchamianiem pliku",
                        LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(getApplicationContext(), "Nie wybrałeś pliku", LENGTH_SHORT).show();
        }
    }
}

负责加载的按钮。

 b2.setOnClickListener(new View.OnClickListener(){

       @Override
        public void onClick(View v){

           Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
           intent.addCategory(Intent.CATEGORY_OPENABLE);
           intent.setType("text/*");
           startActivityForResult(intent,reqLoad);
       }
    });

文件:

Magazyn
Strefa
Rząd
Rama
Słup
Uszkodzenie
Wielkość Uszkodzenia
Lokalizacja
Zielony
Dalsze Działania
Potrzebne Elementy
Typ Elementu
666
/external/images/media/68

最后一行是加载的图片路径

编辑: 问题不仅在于读取文件,还在于读取我选择的文件。 当我指定必须加载的文件时,它会完美加载。当我决定向他展示它必须从哪个文件加载数据时,告诉我该文件不存在。

有效的代码:

testowy.setOnClickListener(new View.OnClickListener(){

       @Override
        public void onClick(View v){

           File pliczek = Environment.getExternalStorageDirectory();
           File plik = new File(pliczek,"/est.txt");
           StringBuilder string;
           string = new StringBuilder();

           try{

               BufferedReader reader = new BufferedReader(new FileReader(plik));
               String linia;
               int licz = 0;

               while((linia = reader.readLine())!=null){

                   switch(licz) {

                       case 0:
                            string.append(linia);
                            i_e_magazyn.setText(linia);
                            string.append('\n');
                            break;

                       case 1:
                           string.append(linia);
                           i_e_strefa.setText(linia);
                           string.append('\n');
                           break;

                       case 2:
                           string.append(linia);
                           i_e_rzad.setText(linia);
                           string.append('\n');
                           break;

                       case 3:
                           string.append(linia);
                           i_e_rama.setText(linia);
                           string.append('\n');
                           break;

                       case 4:
                           string.append(linia);
                           i_e_slup.setText(linia);
                           string.append('\n');
                           break;

                       case 5:
                           string.append(linia);
                           i_e_uszk.setText(linia);
                           string.append('\n');
                           break;

                       case 6:
                           string.append(linia);
                           i_e_w_uszk.setText(linia);
                           string.append('\n');
                           break;

                       case 7:
                           string.append(linia);
                           i_e_lok.setText(linia);
                           string.append('\n');
                           break;

                       case 8:
                           string.append(linia);
                           i_e_klasa.setText(linia);
                           string.append('\n');
                           break;

                       case 9:
                           string.append(linia);
                           i_e_dal_dzial.setText(linia);
                           string.append('\n');
                           break;

                       case 10:
                           string.append(linia);
                           i_e_pot_elem.setText(linia);
                           string.append('\n');
                           break;

                       case 11:
                           string.append(linia);
                           i_e_typ.setText(linia);
                           string.append('\n');
                           break;

                       case 12:
                           string.append(linia);
                           i_e_ilosc.setText(linia);
                           string.append('\n');
                           break;

                       case 13:
                           string.append(linia);
                           wczytaj.setText(linia);
                           string.append('\n');
                           break;

                   }

                   licz++;

               }

           } catch(FileNotFoundException e){

               Toast.makeText(getApplicationContext(),"Nie ma takiego pliku",LENGTH_SHORT)
                       .show();

           } catch(IOException e){

               Toast.makeText(getApplicationContext(),"Nie zczytano pliku",LENGTH_SHORT).show();

           }

       }

    });

适用于选择文件的代码:

if (reqCode == reqLoad) {

        if (resCode == RESULT_OK) {


            Uri wskaznik = data.getData();

            assert wskaznik != null;

            //FileReader test = new FileReader(Data.getData().toString());
            edytuj.setText(String.valueOf(wskaznik));
            File pliczek = Environment.getExternalStorageDirectory();
            File plik = new File(String.valueOf(wskaznik));
            StringBuilder string;
            string = new StringBuilder();

            try {

                BufferedReader reader = new BufferedReader(new FileReader(plik));
                String linia;
                int licz = 0;

                while ((linia = reader.readLine()) != null) {

                    switch (licz) {

                        case 0:
                            string.append(linia);
                            i_e_magazyn.setText(linia);
                            string.append('\n');
                            break;

                        case 1:
                            string.append(linia);
                            i_e_strefa.setText(linia);
                            string.append('\n');
                            break;

                        case 2:
                            string.append(linia);
                            i_e_rzad.setText(linia);
                            string.append('\n');
                            break;

                        case 3:
                            string.append(linia);
                            i_e_rama.setText(linia);
                            string.append('\n');
                            break;

                        case 4:
                            string.append(linia);
                            i_e_slup.setText(linia);
                            string.append('\n');
                            break;

                        case 5:
                            string.append(linia);
                            i_e_uszk.setText(linia);
                            string.append('\n');
                            break;

                        case 6:
                            string.append(linia);
                            i_e_w_uszk.setText(linia);
                            string.append('\n');
                            break;

                        case 7:
                            string.append(linia);
                            i_e_lok.setText(linia);
                            string.append('\n');
                            break;

                        case 8:
                            string.append(linia);
                            i_e_klasa.setText(linia);
                            string.append('\n');
                            break;

                        case 9:
                            string.append(linia);
                            i_e_dal_dzial.setText(linia);
                            string.append('\n');
                            break;

                        case 10:
                            string.append(linia);
                            i_e_pot_elem.setText(linia);
                            string.append('\n');
                            break;

                        case 11:
                            string.append(linia);
                            i_e_typ.setText(linia);
                            string.append('\n');
                            break;

                        case 12:
                            string.append(linia);
                            i_e_ilosc.setText(linia);
                            string.append('\n');
                            break;

                        case 13:
                            string.append(linia);
                            wczytaj.setText(linia);
                            string.append('\n');
                            break;

                    }

                    licz++;

                }

            } catch (FileNotFoundException e) {

                Toast.makeText(getApplicationContext(), "Nie ma takiego pliku",
                        LENGTH_SHORT)
                        .show();

            } catch (IOException e) {

                Toast.makeText(getApplicationContext(), "Nie zczytano pliku", LENGTH_SHORT)
                        .show();

            }

        } else {

            Toast.makeText(getApplicationContext(), "Nie wybrałeś pliku", LENGTH_SHORT).show();

        }
    }

【问题讨论】:

  • 可以发布输入文件吗?可能出错的一件事是您说“我的应用程序生成一个文本文件,其中包含每一行中的一个字段的数据”,但您只使用BufferedReader 执行一个readLine()。我假设您需要阅读的不仅仅是一行,但如果没有看到您的输入,我无法确定。
  • @FrancisBartkowiak 不应该加载我定义的数据并在我定义关闭时关闭吗?
  • 是的。但是你只定义它来加载一行。如果您的输入文件中有多行(即 L1、L2、L3、...、LN),那么您只是在读取 L1。您的所有StringBuilder 所做的就是将第一行添加到其中,然后添加一个换行符(“\n”)。我假设你真正想要做的是获取文件中的每一行并对每一行做一些事情。同样,如果没有看到您的意见,我无法确定。
  • FileReader test = new FileReader(String.valueOf(wczytaj));。更改为FileReader test = new FileReader(Data.getData());。并删除光标的东西。
  • @greenapps 无法解析构造函数'FileReader(android.net.Uri)' :(

标签: java android bufferedreader filereader stringbuilder


【解决方案1】:

我认为你根本不想要StringBuilder。我认为您想读取文件的每一行并将每一行分配给不同的字段,具体取决于您在文件中的哪一行。如果是这种情况,您可以在文件中读取的一种方法是:

FileReader test = new FileReader(Data.getData().toString());
BufferedReader bufor_w = new BufferedReader(test);
String line;
int counter = 0;
while((line = bufor_w.readLine()) != null){
    switch(counter){
        case 0:
            i_e_magazyn.setText(line);
            break;
        case 1:
            i_e_strefa.setText(line);
            break;
        case 2:
            //etc.
            break;
    }
    counter++;
}
bufor_w.close();
test.close();

这将读取文件的每一行,根据您所在的行,您可以将值分配给您喜欢的任何字段。

【讨论】:

  • 它可以从文件中包含的路径加载文件吗?
  • 一旦你到达那条线(看起来是 13 号线),你可以用String 做任何你想做的事情。因此,如果您想读取该行,然后打开它指向的文件,您可以。
  • 不幸的是仍然显示捕获错误。 Android studio 展示 toString 会导致 nullpointerexception
  • 01-31 14:19:42.402 1916-1916/? D/文档:onFinished() [content://com.android.externalstorage.documents/document/primary%3ATest.txt] 01-31 14:19:42.553 1916-1935/? D/OpenGLRenderer:endAllStagingAnimators 位于 0xb4bd9480 (ListView) 上,句柄为 0xb4b91cd0
  • 我发现问题在于 BufferedReader 正在丢失我指向他加载的文件。 FileNotFoundExpection 被捕获。
猜你喜欢
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2016-10-02
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
相关资源
最近更新 更多