【问题标题】:Android Studio - txt file - Counting inside fileAndroid Studio - txt 文件 - 计数内部文件
【发布时间】:2019-01-18 22:03:32
【问题描述】:

我是 Android Studio 编程的初学者。我想制作如下所述的 apk:

  • 按下按钮
  • 整数1保存到txt文件中
  • 如果我关闭 apk 并重新打开并再次按下按钮,我会得到 2 号到 txt 文件 并且这个过程重复(3,4,5...等)。

我需要做什么(在程序中):

  1. 如果文件不存在则创建文件
  2. 查看是否为txt。文件里面已经有一些数字并且这个数字+1,如果不存在(txt文件为空)我需要将整数值1添加到txt。文件。

    下面是我的程序,public void length() 有问题 - 当我用 log.d 测试程序时总是显示空文件,但我被检查了文本文件。设备文件资源管理器中的文件,并在 txt.file 中有编号 1。我也在尝试使用 BufferdReader (br.readLine()) 并得到相同的结果。不知道问题出在哪里……

public class MainActivity extends AppCompatActivity {

    Button btn;
    private static int Counter = 0;
    private static final String FILE_NAME = "data.txt";
    private static String TAG="MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Counter++;
                Log.d(TAG, "onClick: counter "+Counter);
                saveChec();
                Lengt();
                //load();
                // subSu();
            }
        });
    }

    private void subSu() {

    }

    public void Lengt(){
        long length = new File(getFilesDir().getAbsolutePath() + FILE_NAME).length();
        if (length == 0){
            //get alvays empty..
            Log.d(TAG, "Buff: empty ");
            save(); //add value 1 to txt file
            
        }else{
            Log.d(TAG, "Buff: full");
        }
    }

    public void saveChec() {

        FileOutputStream fos = null;

        try {
            fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            Log.d(TAG, "saveChec: crated file ");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        // return;

    }

    public void load() {

        FileInputStream fis = null;

        try {
            fis = openFileInput(FILE_NAME);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
           //get alvays null
            if (br.readLine() == null) {
                Log.d(TAG, "load: empty file ");
                fis.close();
                save();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private void save() {

        FileOutputStream fos = null;

        try {
            fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            int number = 1;
            String numberAsString = Integer.toString(number);
             fos.write(numberAsString.getBytes());
            Log.d(TAG, "save: numberAsString "+numberAsString);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
       // return;
    }
}

感谢您的回答!

【问题讨论】:

    标签: java android android-studio


    【解决方案1】:

    改用此代码:-

    public void SaveFile()
    {
        try {
                //Getting Internal Storage
                File file = new File(Environment.getExternalStorageDirectory(),"");
                File dfile = new File(file+"/data.txt");
                FileWriter write = null;
                //if File Does Exists
                if (!dfile.exists()) {
                    write = new FileWriter(file+"/data.txt");
                    write.write("1");
                    write.close();
                }
                else{
                    FileReader read = new FileReader(dfile);
                    BufferedReader br = new BufferedReader(read);
                    String snum = br.readLine();
                    if(snum!=null) {
                        //Converting Sring to Integer
                        int num = Integer.parseInt(snum);
                        num++;
                        write = new FileWriter(file+"/data.txt");
                        write.write(String.valueOf(num));
                        write.close();
                    }
                    else
                    {                    
                        write = new FileWriter(file+"/data.txt");
                        write.write("1");
                        write.close();
                    }
                }
            }catch (IOException ex){}
    }
    

    将这些权限添加到清单文件:-

    <uses-permission android:name="READ_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="WRITE_EXTERNAL_STORAGE"></uses-permission>
    

    【讨论】:

    • 非常感谢您的评论 :) 我在模拟器上测试了您的代码并且工作正常,数字在增加,但是当我在手机上测试此 code-apk 时,代码无法正常工作并且不要不知道为什么。我用 Toast 看看会发生什么,第一个光标转到 try 然后转到 if (!dfile.exists()) 然后跳转到 catch 可能还有更多事情要做?在清单文件夹中,我添加了permission.WRITE_EXTERNAL_STORAGE .... 谢谢:)
    • 您是否在 Manifest 文件中添加了 READ_EXTERNAL_STORAGE 权限?
    • 仍然无法工作...我将尝试找出使用外部存储的内部存储,也许有问题..
    • 我用这个 File file = new File(Environment.getExternalStorageDirectory(),""); 改变了这个:File file = new File(this.getFilesDir(), ""); 现在工作:))
    【解决方案2】:

    您必须使用文件吗?我会使用Shared Preferences 来存储这个值,因为它只是一个原始值。

    【讨论】:

    • 请在获得评论权限(50个代表)后将其删除并成为评论。
    猜你喜欢
    • 2022-07-08
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多