Попытка проверить, был ли текстовый файл с тем же именем уже создан

Я пытаюсь создать базовое приложение, в котором я вводю текст в приложение, этот текст называет текстовым файлом, а затем приложение добавляет дополнительный текст в файл. Если текстовый файл с таким именем уже существует, я хочу вывести "файл существует". На данный момент, насколько я вижу, проверка на наличие файла с таким именем уже не работает. Кто-нибудь может понять почему? Из того, что я вижу, должно работать. Вот код:

package com.example.user.filetest;

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.File;

public class MainActivity extends AppCompatActivity {

FileUtility myFile = new FileUtility();
private File root;
private File file;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    final EditText enter = ((EditText) findViewById(R.id.editText));
    final TextView show = ((TextView) findViewById(R.id.textView));
    Button b = ((Button) findViewById(R.id.button));
    b.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
             final String s = enter.getText().toString();
             file = new File(root, "//" + s);
             if (file.exists()) {
                 show.setText("File Exists");
             }
             else {
                 myFile.createFile(getApplicationContext(), s);
                 myFile.writeLine("test");
                 show.setText(myFile.readAll());
             }
         }
     }
    );
}

 package com.example.user.filetest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.content.*;

public class FileUtility {

private File root;
private File file;

public FileUtility() {
    root = Environment.getExternalStorageDirectory();
}

public void createFile(Context context, String fileName) {
    try {
        if (root.canWrite()) {
            file = new File(root, "//" + fileName);
            if (!file.exists()) {
                file.createNewFile();
            }
        }
        else
        {
            file = new File(context.getFilesDir(), "//" + fileName); // File(root, "//" + fileName);
            if (!file.exists()) {
                file.createNewFile();
            }
        }
    } catch (IOException e) {
        Log.e("Error", "fail to create a new file");
    }

}


public String readAll() {
    StringBuilder returnString = new StringBuilder();
    try {
        BufferedReader in;
        FileReader datawriter = new FileReader(file);
        in = new BufferedReader(datawriter);
        if (file.exists()) {
            String str = null;
            while((str=in.readLine())!=null)
            {
                returnString.append(str + "\n");
            }
        }
        in.close();
    } catch (IOException e) {
        Log.e("Error", "fail to write file");
    }
    return returnString.toString();
}

public void writeLine(String message) {
    try {
        BufferedWriter out;
        FileWriter datawriter = new FileWriter(file,true);
        out = new BufferedWriter(datawriter);
        if (file.exists()) {
            out.write(message + "\n");
            out.flush();
        }
        out.close();
    } catch (IOException e) {
        Log.e("Error", "fail to write file");
    }
}

}

1 ответ

У вас есть проблема с тем, как вы объявляете и инициализируете корень файла в обоих классах.

В MainActivity:

File root атрибут не инициализирован

Измените свой код на

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    root = Environment.getExternalStorageDirectory(); // Initialilze the root file here
    // ...

     b.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
             final String s = enter.getText().toString();
             file = new File(root, "//" + s);
             if (file.exists()) {
                 show.setText("File Exists");
             }
             else {
                 myFile.createFile(root, getApplicationContext(), s);  // pass the root file as parameter
                 myFile.writeLine("test");
                 show.setText(myFile.readAll());
             }
         }
     }
);
}

В FileUtility:

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

class FileUtility{

   private File file;

   public FileUtility() {
   }

   public void createFile(File root, Context context, String fileName){
      // Use the root initialized into the main activity 
      //...

А ты

Другие вопросы по тегам