我创建了一个按钮,用于创建文件然后将其作为电子邮件附件发送, 它从其中一个 TextView 中获取文本,将其保存为 .txt 并发送。一个小的电子邮件服务选项选择器也应该出现。该代码旨在创建一个文件路径(如果文件路径不存在)。此代码位于 onCreate 方法之上,并且在常规 Activity 中。 我一直在 logcat 中收到此消息(用 (-->) 标记的特定消息):
-->08-06 12:53:01.019 18432-18432/com.example.adrian.trucktracker W/System.err﹕ java.io.IOException: open failed: ENOENT (No such file or directory)<---
08-06 12:53:01.019 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.io.File.createNewFile(File.java:946)
08-06 12:53:01.019 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.example.adrian.trucktracker.Locator.clickedUpdate(Locator.java:76)
08-06 12:53:01.019 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-06 12:53:01.019 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View$1.onClick(View.java:3860)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View.performClick(View.java:4480)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.view.View$PerformClick.run(View.java:18686)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.os.Looper.loop(Looper.java:157)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5872)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at libcore.io.Posix.open(Native Method)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ at java.io.File.createNewFile(File.java:939)
08-06 12:53:01.029 18432-18432/com.example.adrian.trucktracker W/System.err﹕ ... 15 more
我的代码:
public void clickedUpdate(View view)
{
TextView dLong = (TextView) findViewById (R.id.textLong);
TextView dLat = (TextView) findViewById (R.id.textLat);
String dataLat = dLat.getText().toString();
String dataLong = dLong.getText().toString();
boolean UpdateResume;
if(!(dataLat.equals("") && !(dataLong.equals(""))))
{
UpdateResume = true;
}
else
{
UpdateResume = false;
}
TelephonyManager telephonemanager =(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
String PhoneNumber = telephonemanager.getLine1Number();
File DataDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"/LocationData");
if(!DataDir.exists())
{
try
{
DataDir.mkdir();
}
catch (Exception e)
{
e.printStackTrace();
}
}
File Data = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"data" + File.separator+"Locationer.txt");
String datapath = Data + ""
if(!Data.exists())
{
try {
line 76 ----> Data.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
while (UpdateResume = true)
{
if (Data.exists())
{
try
{
FileWriter fileWriter = new FileWriter(Data);
BufferedWriter bfWriter = new BufferedWriter(fileWriter);
bfWriter.write(PhoneNumber + "," + dataLat + "," + dataLong);
bfWriter.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
break;
}
}
Intent emailintent = new Intent(Intent.ACTION_SEND);
emailintent.setType("text/plain");
emailintent.putExtra(Intent.EXTRA_EMAIL, new String[]{"apraiswater@legion-logistics.com"});
emailintent.putExtra(Intent.EXTRA_SUBJECT, "Data");
emailintent.putExtra(Intent.EXTRA_TEXT, "Hello World!");
File root = Environment.getExternalStorageDirectory();
String DataAttachment = "Android/data/Locationer.txt";
File filer = new File(root, DataAttachment);
if (!filer.exists() || filer.canRead())
{
return;
}
Uri uri = Uri.fromFile(filer);
emailintent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailintent, "Choose an Email provider"));
}
最佳答案
一些细节似乎相关:
首先检查目录是否存在:
File DataDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"/LocationData");
if(!DataDir.exists())
{
try
{
DataDir.mkdir();
}
catch (Exception e)
{
e.printStackTrace();
}
}
根据documentation ,不需要您的 try{}catch(Exception e){}
。您只需要检查该目录是否确实存在。还有一个问题是您似乎创建了另一个子目录的子目录。所以,你可能想把它换成mkdirs()
相反。
然后,如果文件不存在,则尝试创建文件
try {
line 76 ----> Data.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
查看 this method 的文档.您可能会注意到它告诉您
This method is not generally useful. For creating temporary files, use createTempFile(String, String) instead. For reading/writing files, use FileInputStream, FileOutputStream, or RandomAccessFile, all of which can create files.
但也许,如果您包含了适当的权限,我上面建议的更改将有助于使您的代码正常工作。
关于java - 按钮不创建文件并在按下时显示电子邮件提供商选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165695/