片段中的FileInputStream给出FileNotFound异常

时间:2018-09-20 21:43:28

标签: java android fragment

我正在尝试使用片段类将整数保存在内部存储中,并且似乎能够使用FileOutputStream保存文件,但是该程序一旦创建就似乎无法找到它们。

这是相关的Java类:

advertised.listeners

在加载Fragment时,即使我之前创建了它,它始终会给出FileNotFound异常。任何帮助,不胜感激!

2 个答案:

答案 0 :(得分:0)

仅在单击按钮后才创建文件,但是您试图在创建片段后立即读取文件。这就是为什么您收到FileNotFound异常的原因。

将文件读取的代码放入方法内,并在单击按钮后随时调用它。像这样:

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;
}

答案 1 :(得分:0)

您是否尝试创建File对象,然后调用exist(),canRead()或canExecute()方法来测试目录是否有效? 今天我遇到了同样的问题,这花了我大约两个小时才能部分弄清。真烦人。根据类代码的结构,Java不允许您在单元测试中读取文本文件。尝试使用main方法阅读它。 让我知道它是否有效:)