FileInputStream во Фрагменте, дающем исключение FileNotFound - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь сохранить целые числа во внутреннем хранилище, используя класс фрагмента, и, похоже, я могу использовать FileOutputStream для сохранения файлов, но программа, кажется, никогда не сможет найти их после создания.

Вот соответствующий класс Java:

public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                         final Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_preferences, container, false);

    final SeekBar s1 = (SeekBar) root.findViewById(R.id.s1Bar);

    Button button = (Button) root.findViewById(R.id.savebutton);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int spi = s1.getProgress();

            String fileContents = String.valueOf(spi);

            try {
                FileOutputStream outputStream = getActivity().openFileOutput("myText.txt", Context.MODE_PRIVATE);
                outputStream.write(fileContents.getBytes());
                outputStream.close();
                Toast.makeText(getContext(), "File saved!", Toast.LENGTH_SHORT).show();}
            catch (Exception e){

                e.printStackTrace();
                Toast.makeText(getContext(), "File not saved!", Toast.LENGTH_SHORT).show();

            }
        }
    });

    s1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
            spicinessText.setText("Spiciness: "+i);
            int spiciness = i;
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    try {

        FileInputStream inputStream = getActivity().openFileInput("myText.txt");


        String m = inputStream.toString();

        int c = Integer.parseInt(m);

        s1.setProgress(c);

        Toast.makeText(getContext(), "File Received!", Toast.LENGTH_SHORT).show();

    } catch (Exception e){

        e.printStackTrace();

        Toast.makeText(getContext(), "File not received", Toast.LENGTH_SHORT).show();

    }

    return root;
}

При загрузке фрагмента он всегда выдает исключение FileNotFound, даже если я его создал ранее.Любая помощь с благодарностью!

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Вы пытались создать объект File, а затем вызывать методы exist (), canRead () или canExecute (), чтобы проверить, работает ли каталог?Я столкнулся с той же проблемой сегодня, что заняло у меня около двух часов, чтобы частично разобраться.Это было так раздражает.В зависимости от того, как структурирован код вашего класса, Java не позволяет вам читать текстовый файл в модульном тесте.Попробуйте прочитать это в основном методе.Дайте мне знать, если это работает:)

0 голосов
/ 21 сентября 2018

Вы создаете файл только после нажатия кнопки, но пытаетесь прочитать файл сразу после создания фрагмента.Вот почему вы получаете FileNotFound Exception.

поместите код чтения файла в метод и вызывайте его в любое время после нажатия кнопки.Как то так:

public void readFile(){
     try {

        FileInputStream inputStream = getActivity().openFileInput("myText.txt");
        String m = inputStream.toString();
        int c = Integer.parseInt(m);
        s1.setProgress(c);
        Toast.makeText(getContext(), "File Received!", Toast.LENGTH_SHORT).show();

    } catch (Exception e){
        e.printStackTrace();
        Toast.makeText(getContext(), "File not received", Toast.LENGTH_SHORT).show();

   }
}



public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                     final Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_preferences, container, false);

    final SeekBar s1 = (SeekBar) root.findViewById(R.id.s1Bar);

    Button button = (Button) root.findViewById(R.id.savebutton);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int spi = s1.getProgress();
            String fileContents = String.valueOf(spi);

            try {
                FileOutputStream outputStream = getActivity().openFileOutput("myText.txt", Context.MODE_PRIVATE);
                outputStream.write(fileContents.getBytes());
                outputStream.close();
                Toast.makeText(getContext(), "File saved!", Toast.LENGTH_SHORT).show();
                readFile(); // FILE IS CREATED NOW. SO YOU CAN READ IT.
            }
            catch (Exception e){

                e.printStackTrace();
                Toast.makeText(getContext(), "File not saved!", Toast.LENGTH_SHORT).show();

            }
        }
    });

    s1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
            spicinessText.setText("Spiciness: "+i);
            int spiciness = i;
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    return root;
}
...