2016-04-05 10 views
-4

Ich versuche, eine grundlegende App zu erstellen, wo ich Text in die App eingeben, dieser Text benennt eine Textdatei, dann fügt die App zusätzlichen Text in die Datei. Wenn bereits eine Textdatei mit dem gleichen Namen existiert, möchte ich "Datei existiert" ausgeben. Im Moment von dem, was ich sehen kann, funktioniert die Überprüfung, ob eine Datei mit dem gleichen Namen bereits existiert. Kann jemand sehen warum? Von dem, was ich sehe, sollte es funktionieren. Hier ist der Code:Versuchen, zu überprüfen, ob Textdatei mit dem gleichen Namen bereits erstellt wurde

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

wo die "root" Datei in Ihrem MainActivity initialisiert? – Opiatefuchs

+2

Sie schreiben in Ihrer onClick-Methode: file = new File (root, "//" + s); <- aber zu diesem Zeitpunkt ist "root" null ... nur ein Copy/Paste-Problem? – Opiatefuchs

+1

Hey Joe, was ist der Fehler, den du bekommst, den Code einfügend, den ich zur Verfügung stellte? Wenn möglich, folgen Sie bitte diesen Schritten :) 1> Überprüfen Sie in Ihrer Erstellungsdatei, wo Sie eine Datei im Root- oder internen Speicher erstellen, indem Sie einen Breakpoint setzen :) und sobald Sie feststellen, wo Sie erstellen, überprüfen Sie im gleichen Ordner für die Datei :) Es ist nichts falsch in Ihrem Code :) möglicherweise überprüfen Sie falsche Ordner –

Antwort

3

Sie haben ein Problem in der Art und Weise Sie deklarieren und Datei-Wurzel in beiden Klassen initialisieren.

In MainActivity:

Das File root Attribut nicht

Ändern Sie Ihren Code

@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()); 
      } 
     } 
    } 
); 
} 

In FileUtility initialisiert wird:

Wie Sie auch die Wurzel in FileUtility mit erstellen die neue Datei können Sie als Parameter übergeben und dann das Klassenattribut entfernen.

class FileUtility{ 

    private File file; 

    public FileUtility() { 
    } 

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

Und Sie

Verwandte Themen