我正在编写一个小应用程序,它可以读取必须定期从设备外部源写入存储设备的文件,无论是USB,蓝牙,Airdroid等.从我读过的,没有什么可以写到内部存储器.我想管理内部存储中的文件以获取访问隐私.
我的第一个解决方案是允许用户将文件写入外部存储器,然后点击按钮将其传输到内部存储器的活动.如果在n分钟内没有发生这种情况,则会破坏外部存储上的文件.但是,我发现这getExternalStorageDirectory是非常无用的,因为设备模仿内部存储上的外部存储,Android无法知道是否以及如何完成.
然而,我想知道是否没有某种内置活动允许用户直接从内部存储上传或下载文件,但不能免费访问内部存储的整个文件结构,就像他们使用内部存储一样.
作为最后的手段,也许我的应用程序可以通过TCP连接接收文件并将其写入内部存储本身.它很乱,但试图找到一张SD卡也是如此.请参阅问题查找外部SD卡位置.
新功能:此练习的目的是查找SD卡上目录中的所有.csv文件,让用户选择一个,处理它,并将输出文件写入SD卡.用户将输入"权重"值,该值将用于处理文件的计算中.
但是,由于Android在提供真正外部存储(即SD卡)的位置方面是如此不可靠,我想尝试将文件存储在内部存储中,其中Android似乎对该存储的位置更加诚实和可靠.
我遇到一个奇怪的问题.我的应用程序可以写一个简单的文本文件到SD卡,有时它适用于一些人,但不适用于其他人,我不知道为什么.
对于某些人来说,如果他们...在文件中放置一些字符等强制关闭它.我似乎无法重现它,因为我没有麻烦,但这是处理文件写入的代码.任何人都可以想到可能导致问题的事情或更好的方法吗?
public void generateNoteOnSD(String sFileName, String sBody)
{
try
{
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists())
{
root.mkdirs();
}
File gpxfile = new File(root, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
e.printStackTrace();
importError = e.getMessage();
iError();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在将应用程序从Symbian/iPhone移植到Android,其中一部分是将一些数据保存到文件中.我使用FileOutputStream将文件保存到私有文件夹/ data/data/package_name/files中:
FileOutputStream fos = iContext.openFileOutput( IDS_LIST_FILE_NAME, Context.MODE_PRIVATE );
fos.write( data.getBytes() );
fos.close();
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找一种如何加载它们的方法.我正在使用FileInputStream,但它允许我逐字节读取文件,这是非常低效的:
int ch;
StringBuffer fileContent = new StringBuffer("");
FileInputStream fis = iContext.openFileInput( IDS_LIST_FILE_NAME );
while( (ch = fis.read()) != -1)
fileContent.append((char)ch);
String data = new String(fileContent);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使用更好的方式读取文件?
file-io android fileinputstream fileoutputstream android-file
有没有解决方法如何选择保存文件位置?也许用原始文件浏览器,选择目的地?
谢谢!
我正在尝试将图像添加到我的Twitter分享意图中.我在一个类中本地保存图像,然后在另一个类中保存图像并尝试附加到我的意图.
这是我的代码
private void shareTwitter(){
try {
FileInputStream fis;
fis = getActivity().openFileInput("photo.jpg");
Bitmap shot = BitmapFactory.decodeStream(fis);
File file = new File(MapView.path, "snapshot.jpg");
if(file.exists()){
Log.i("FILE", "YES");
}else{
Log.i("FILE", "NO");
}
Uri uri = Uri.parse(file.getAbsolutePath());
//Uri uri = Uri.parse("android.resource://com.gobaby.app/drawable/back");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("/*");
intent.setClassName("com.twitter.android", "com.twitter.android.PostActivity");
intent.putExtra(Intent.EXTRA_TEXT, "Thiws is a share message");
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(intent);
} catch (final ActivityNotFoundException e) {
Toast.makeText(getActivity(), "You don't seem to have twitter installed on this device", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
// TODO Auto-generated …Run Code Online (Sandbox Code Playgroud) 我需要在我的应用程序中使用一些文件.它们保存在资产文件夹中.我看到SO上的讨论,文件从资产文件夹复制到内部存储上的/ data/data /,然后被使用.我得到了代码,但我没有得到的是,将资产复制到内部存储需要什么?如果有人有这方面的经验,请帮忙!
我正在为我们的客户开发一个应用程序,我们遇到了一个小功能,所以需要你的帮助,
Scenarion:我们开发了一个回收视图,用户可以根据类别查看图像列表和歌曲和视频,现在用户可以选择查看或收听图像,音频或视频,还有另一个选项可以下载.
需要帮助@我们使用一个静态路径完成此操作,用户可以保存所有文件,但我们的客户希望允许用户选择保存文件的路径,为此我们需要文件对话框,用户可以从中选择位置.
注意:伙计们注意到,对于一个静态路径,我们已经完成了这个并且它工作得很好,我们也将这个路径存储在本地数据库中,以便我们以后可以使用它.所以现在只剩下我们如何允许用户选择保存位置文件?
Android Developer参考(本页)说:
Throws FileNotFoundException
Run Code Online (Sandbox Code Playgroud)
但在一开始,它说:
打开与此Context的应用程序包关联的私有文件以进行写入.如果文件尚不存在,则创建该文件.
如果是这种情况,为什么会抛出FileNotFoundException?
我只是想确保我正确处理所有案件.我正在使用默认功能,所以我可以将它包装在try..catch块中没有任何内容的catch块中,因为它不可能FileNotFoundException被抛出默认功能吗?
编辑: '默认功能'的示例:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
Run Code Online (Sandbox Code Playgroud) OnActivityCreated我在做:
activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
Run Code Online (Sandbox Code Playgroud)
在logcat我得到:
com.package W/ContextImpl? Failed to ensure directory: /storage/sdcard1/Android/data/com.package/files/Pictures
Run Code Online (Sandbox Code Playgroud)
这种情况只发生在LOLLIPOP(MOTO G 2014)上,KITKAT(Nexus 4)的一切都很好.我在清单上有WRITE_EXTERNAL_STORAGE.我在这里错过了什么?存储可通过文件浏览应用程序(如ES Explorer)安装和访问.
编辑:令人惊讶的是,即使我收到上面报告的警告,文件也会在目录下正确创建.
将 Uri (android) 对象转换为 URI (java.net) 对象(反之亦然)的最佳方法是什么?我使用以下方法将 Uri 转换为 URI:
Uri androidUri;
URI netURI= new URI(androidUri.toString());
Run Code Online (Sandbox Code Playgroud)
但我不知道这是否是最好的方法,也不知道如何扭转它。