简体   繁体   English

应用启动android时如何从内部存储读取文件

[英]How to read file from internal storage when app start android

I got button wich save changes, and put this in internal storage, then when app start I want to read file if there is any ofc. 我有保存更改的按钮,并将其保存在内部存储中,然后在应用启动时,如果有任何文件,我想读取文件。 i thought that would be enought but im fresh coder and dunno that is good. 我以为那是足够的,但我是新鲜的编码员和不知道这是好事。

I dont know where is mistake, and also that is good code, pls help me becous i stuck 我不知道哪里出错了,那也是很好的代码,请帮助我,因为我被卡住了

My code: 我的代码:

public class MyGameDetailsFragment extends Fragment { 公共类MyGameDetailsFragment扩展Fragment {

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


    try {
        FileInputStream is = getActivity().openFileInput(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        is.close();
    } catch(OutOfMemoryError om) {
        om.printStackTrace();


    } catch(Exception ex) {
        ex.printStackTrace();

    }
    String result = sb.toString();
    saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
   saveBtn.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {
            Data1 = s1.getText().toString();
            Data2 = s2.getText().toString();
            Data3 = s3.getText().toString();
            Data4 = s4.getText().toString();
            Data5 = s5.getText().toString();
            Data6 = s6.getText().toString();


            try {

                FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
                ObjectOutputStream outputStream = new ObjectOutputStream(fos);
                outputStream.write(Data1.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data2.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data3.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data4.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data5.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data6.getBytes());
                outputStream.close();

                //Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }

            try {
                FileInputStream inputStream = getActivity().openFileInput(file);
                BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder total = new StringBuilder();
                String line;

                while ((line = r.readLine()) != null) {
                    total.append(line);
                }
                r.close();
                inputStream.close();
                Log.d("File", "File contents: " + total);
            } catch (Exception e) {
                e.printStackTrace();

            }

        }
    });

    return view;

} } }}

Ps: s1,s2 etc are created in code etc ps:s1,s2等在代码等中创建

Permission 允许

    <uses-permission android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

First of all i would suggest you that, Dont write code in OnCreateView() method in fragments, always write code in OnViewCreated method. 首先,我建议您不要在片段的OnCreateView()方法中编写代码,而应始终在OnViewCreated方法中编写代码。

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_my_game_details, container, false);
    return view;
}

public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        try {
        FileInputStream is = getActivity().openFileInput(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        is.close();
    } catch(OutOfMemoryError om) {
        om.printStackTrace();


    } catch(Exception ex) {
        ex.printStackTrace();

    }
    String result = sb.toString();
    saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
   saveBtn.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {
            Data1 = s1.getText().toString();
            Data2 = s2.getText().toString();
            Data3 = s3.getText().toString();
            Data4 = s4.getText().toString();
            Data5 = s5.getText().toString();
            Data6 = s6.getText().toString();


            try {

                FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
                ObjectOutputStream outputStream = new ObjectOutputStream(fos);
                outputStream.write(Data1.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data2.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data3.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data4.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data5.getBytes());
                outputStream.write(newline.getBytes());
                outputStream.write(Data6.getBytes());
                outputStream.close();

                //Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }

            try {
                FileInputStream inputStream = getActivity().openFileInput(file);
                BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder total = new StringBuilder();
                String line;

                while ((line = r.readLine()) != null) {
                    total.append(line);
                }
                r.close();
                inputStream.close();
                Log.d("File", "File contents: " + total);
            } catch (Exception e) {
                e.printStackTrace();

            }

        }
    });
}

If you are facing any error, then Please write the stacktrace of error. 如果您遇到任何错误,请编写错误的堆栈跟踪。

Thanks 谢谢

public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Other = (TextView) view.findViewById(R.id.Details);
    OtherD = (TextView) view.findViewById(R.id.OtherDetails);



    try {
        FileInputStream is = getActivity().openFileInput(file);
        byte[] input = new byte[is.available()];
        while(is.read(input) != -1){


            value += new String(input);
        }
        is.getFD().sync();
        //is.flush();
        is.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    String[] strArray =  value.split(";");

    s1.setText(strArray[1]);
    s2.setText(strArray[2]);
    s3.setText(strArray[3]);
    s4.setText(strArray[4]);
    s5.setText(strArray[5]);
    s6.setText(strArray[6]);
    s7.setText(strArray[7]);






    saveBtn = (Button) view.findViewById(R.id.savechangesbtn);
    saveBtn.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {
            Data1 = s1.getText().toString();

            Data2 = s2.getText().toString();
            Data3 = s3.getText().toString();
            Data4 = s4.getText().toString();
            Data5 = s5.getText().toString();
            Data6 = s6.getText().toString();
            Data7=  s7.getText().toString();


            try {

                FileOutputStream fos=getActivity().openFileOutput(file, getActivity().MODE_PRIVATE);
                ObjectOutputStream outputStream = new ObjectOutputStream(fos);
                outputStream.write(string3.getBytes());
                outputStream.write(Data1.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data2.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data3.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data4.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data5.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data6.getBytes());
                outputStream.write(string3.getBytes());
                outputStream.write(Data7.getBytes());
                outputStream.write(string3.getBytes());
                //outputStream.getFD().sync();
                outputStream.flush();
                outputStream.close();
                //Toast.makeText(context,"file saved",Toast.LENGTH_SHORT).show();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }

            try {
                FileInputStream inputStream = getActivity().openFileInput(file);
                BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder total = new StringBuilder();
                String line;
                while ((line = r.readLine()) != null) {
                    total.append(line);
                }
                r.close();
                inputStream.close();
                Log.d("File", "File contents: " + total);
            } catch (Exception e) {
                e.printStackTrace();

            }

        }
    });


}

Solve it on my own 我自己解决

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM