2016-04-05 4 views
-4

私はアプリケーションにテキストを入力する場所に基本的なアプリケーションを作成しようとしています。同じ名前のテキストファイルがすでに存在する場合は、「ファイルが存在する」という出力をしたい。私が見ることができる瞬間、同じ名前のファイルが既に存在するかどうかを確認することは機能していません。なぜ誰かが見ることができますか?私が見ていることから、それはうまくいくはずです。同じ名前のテキストファイルが既に作成されているかどうかを確認しようとしています

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

? – Opiatefuchs

+2

あなたはあなたのonClickメソッドで書いています:file = new File(root、 "//" + s); < - しかし、この時点では 'root'はヌルです......ただコピー/ペーストの問題ですか? – Opiatefuchs

+1

ちょっとジョー、私が提供したコードを貼り付けることになっているエラーは何ですか?可能であれば、次の手順を実行してください:) 1>作成ファイルで、どこにブレークポイントを置いてルートファイルまたは内部メモリ内のファイルを作成しているかを確認してください。 :)あなたのコードに間違ったものはありません:)あなたが間違ったフォルダをチェックしているかもしれません。 –

答えて

3

あなたは両方のクラスでのファイルのルートを宣言し、初期化する方法で問題があります。ここでは、コードです。 File root属性が

がFileUtilityで

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

にコードを変更して初期化されていない

:MainActivityで

あなたも作成する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 
     //... 

そして "ルート" ファイルがMainActivityに初期化されます

関連する問題