Как мне записать файл .txt в Android?

У меня есть приложение, которое должно читать и писать в текстовый файл. У меня есть чтение, но нет записи. Идея состоит в том, что когда я нажимаю кнопку «Сохранить» на экране, вся информация, которая была помещена в текстовые представления, сохраняется в массив и записывается каждый сегмент массива в текстовый файл. Это мой код для письменной части:

public class AddOrModify extends Activity {

    private Button Savebtn;
    private Button Cancelbtn;
    private EditText NameofRoute;
    private EditText Address1;
    private EditText City1;
    private EditText State1;
    private EditText Zip1;
    private EditText Address2;
    private EditText City2;
    private EditText State2;
    private EditText zip2;




        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.add_or_modify);

            Savebtn = (Button)findViewById(R.id.savebtn);
            Savebtn.setOnClickListener(new btnlistenersave());

            Cancelbtn = (Button)findViewById(R.id.cancelbtn);
            Cancelbtn.setOnClickListener(new btnlistenercancel());

        }

        private class btnlistenersave implements View.OnClickListener{
            public void onClick(View v) {

                NameofRoute = (EditText)findViewById(R.id.NameofRoute);
                Address1 = (EditText)findViewById(R.id.editAddress1);
                City1 = (EditText)findViewById(R.id.City1);
                State1= (EditText)findViewById(R.id.State1);
                Zip1 = (EditText)findViewById(R.id.Zip1);
                Address2= (EditText)findViewById(R.id.Address2);
                City2 = (EditText)findViewById(R.id.City2);
                State2 = (EditText)findViewById(R.id.State2);
                zip2 = (EditText)findViewById(R.id.Zip2);

                //String[] mySettings ={NameofRouteinput,Address1input,City1input, State1input,Zip1input,Address2input,City2input,State2input,Zip2input,";"};


               // if(mySettings != null){ 
                try{

                    String NameofRouteinput = NameofRoute.getText().toString();
                    String Address1input = Address1.getText().toString();
                    String City1input = City1.getText().toString();
                    String State1input=State1.getText().toString();
                    String Zip1input = Zip1.getText().toString();
                    String Address2input =Address2.getText().toString();
                    String City2input = City2.getText().toString();
                    String State2input = State2.getText().toString();
                    String Zip2input= zip2.getText().toString();
                    OutputStreamWriter out = new OutputStreamWriter(openFileOutput("myaddress.txt",0));

                    String[] mySettings ={NameofRouteinput,Address1input,City1input, State1input,Zip1input,Address2input,City2input,State2input,Zip2input,";"};


                    for(int i =0; i < mySettings.length; i++)
                    out.write(mySettings[i]);
                    out.close();
                }
                catch (java.io.IOException e){

                }


                Intent i = new Intent(AddOrModify.this, Frontpage.class);
                startActivity(i);

            }

        }

        private class btnlistenercancel implements View.OnClickListener{

            public void onClick(View v) {
                Intent i = new Intent(AddOrModify.this, Frontpage.class);
                startActivity(i);
            }

        }

}

person Chris Braswell    schedule 08.12.2012    source источник


Ответы (2)


с решением мари я получал

       java.lang.IllegalArgumentException: contains a path separator

затем я попробовал следовать, и это сработало для меня

  File root = new File(DIRECTORY_PATH);
  File gpxfile = new File(root, "samples.txt");
  FileWriter writer = new FileWriter(gpxfile);
  writer.append("First string is here to be written.");
  writer.flush();
  writer.close();

вы можете зациклить его, чтобы написать несколько строк

person Zeeshan Ghazanfar    schedule 07.01.2015
comment
Чему равен DIRECTORY_PATH? - person tgkprog; 31.12.2016
comment
@tgkprog Вы можете либо использовать каталог по умолчанию Environment.getExternalStorageDirectory().toString(), либо, если вы создали свой собственный каталог, вы можете использовать что-то вроде Environment.getExternalStorageDirectory().toString()+"/Your Directory/" - person Zeeshan Ghazanfar; 01.01.2017
comment
Ах, понял :) Я бы предпочел File path = new File(Environment.getExternalStorageDirectory(), Your Directory/subpath/a ), это будет выглядеть после / . но спасибо за то, что научили меня среде - новичок в Android developer.android.com/reference /android/os/Environment.html - person tgkprog; 01.01.2017

Вы можете использовать FileOutputStream вместо OutputStreamWriter, примерно так:

File file = getFileStreamPath("test.txt");

if (!file.exists()) {
   file.createNewFile();
}

FileOutputStream writer = openFileOutput(file.getName(), Context.MODE_PRIVATE);

for (String string: data){
    writer.write(string.getBytes());
    writer.flush();
}

writer.close();

Ознакомьтесь с документами для Android.

person mari    schedule 08.12.2012
comment
Могу ли я сделать это со всем массивом? в вашем примере я пишу одну строку, мне нужно сделать это для многих значений, или мне придется делать их по отдельности? - person Chris Braswell; 08.12.2012
comment
Да, тоже должно работать... я обновил ответ для вас. Надеюсь, я помог. - person mari; 09.12.2012
comment
Что должно быть в области данных? Я пытался поместить туда строку, массив строк и кучу других вещей. Либо это дает мне ошибку, либо все остальные строки получают IOException. - person Marcel Marino; 03.01.2014
comment
@Dooomsknight Я тоже так думал. Но когда я это делаю, я получаю IOException в каждой второй строке. В итоге произошло то, что мне нужно было окружить его попыткой/поймать. - person Marcel Marino; 03.01.2014