Android Studio のFileOutputStream.writeで文字の先頭に「null」がつく
解決したいこと
Android Studio初心者で、Java無知です。
Android Studioで超簡易的なメモ帳をつくっていて、それでファイルに出力し、読み込もうとしたときに文字の先頭に「null」のいう文字がついてきました。
例えば、このように「abc」と入力し、WRITEをクリックして書き込みます。↓
そしたらREADをクリックし、読み込みます。そしたら「abc」と表示されるはずが...
「nullabc」となります。これにはどう対処すればよいでしょうか。
回答お願いします。
該当するソースコード
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText editText = findViewById(R.id.editText);
String text = editText.getText().toString();
saveFile("newfile.txt",text);
//wrirte button click event
}
});
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//read button click event
String text = readFile("newfile.txt");
EditText editText = findViewById(R.id.editText);
editText.setText(text);
}
});
}
private void saveFile(String file, String str){
try {
FileOutputStream fileOutputStream = openFileOutput(file, MODE_PRIVATE );
fileOutputStream.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
private String readFile(String file) {
String text = null;
try {
FileInputStream fileInputStream = openFileInput(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"));
String lineBuffer;
while (true) {
lineBuffer = reader.readLine();
if (lineBuffer != null) {
text += lineBuffer;
} else {
break;
}
}
} catch (IOException e) {
Toast myToast = Toast.makeText(
getApplicationContext(),
"ファイルの読み込みに失敗しました!",
Toast.LENGTH_SHORT
);
myToast.show();
}
return text;
}
}
ねんのためレイアウトファイルのコードも載せておきます。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="334dp"
android:layout_height="539dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Text"
android:textAlignment="textStart"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.171" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:text="Write"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.79"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.971" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="71dp"
android:text="Read"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintHorizontal_bias="0.347"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.969" />
</androidx.constraintlayout.widget.ConstraintLayout>
自分で試したこと
Googleで検索
0