当我尝试使用USB数据创建txt文件时,会创建一个空的txt文件夹。
另一个实现类似的应用有时可以工作,有时无法工作。
下面附上的代码只是我编码的一部分。
我可以知道是什么问题吗?我已经介绍了几个网站和论坛,介绍如何写入文件。我认为我使用的方法是最通用的方法。但是以某种方式不起作用(或更精确地说。它可以工作一到两次,然后不再创建任何文件)。
private String filename = ".txt";
File myExternalFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
setContentView(R.layout.activity_main);
if(isExternalStorageAvailable() || !isExternalStorageReadOnly()){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
filename = "gas_sensor_"+currentDateandTime + filename;
myExternalFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), filename);
if (!myExternalFile.mkdirs()) {
Log.e(logTag, "Directory not created");
}else{
Log.e(logTag, "Directory created");
}
}
}
private void tvAppend(TextView tv, CharSequence text) {
final TextView ftv = tv;
final CharSequence ftext = text;
runOnUiThread(new Runnable() {
@Override
public void run() {
ftv.append(ftext);
ftv.setMovementMethod(new ScrollingMovementMethod());
}
});
try{
FileOutputStream fos = new FileOutputStream(myExternalFile,true);
fos.write(ftext.toString().getBytes());
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
private static boolean isExternalStorageReadOnly() {
String extStorageState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) {
return true;
}
return false;
}
private static boolean isExternalStorageAvailable() {
String extStorageState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(extStorageState)) {
return true;
}
return false;
}
答案 0 :(得分:1)
尝试此代码。您传递直接文件夹名称而不是文件
try{
File file = new File(myExternalFile, "your_file_name.txt")
FileOutputStream fos = new FileOutputStream(file,true);
fos.write(ftext.toString().getBytes());
fos.close();
}catch (IOException e){
e.printStackTrace();
}