我从用户的相册中获取了一张图像,并将其保存在一个文件夹中。
以下是代码:
filename = "pippo.png";
try {
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// Create imageDir
File myPath = new File(directory,filename);
FileOutputStream out = new FileOutputStream(myPath);
theImage.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
Log.d("Image","saved success");
picture = directory.getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
Log.d("Image","saved failed");
}
然后我读了图像,用代码改变了它的名字:
if(comingIntent.hasExtra("FILEPATH"))
{
filePath = comingIntent.getStringExtra("FILEPATH");
String filename = "pippo.png";
try {
File f = new File(filePath, filename);
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
playerImage.setImageBitmap(b);
File newfile = new File(filePath,username+".png");
f.renameTo(newfile);
Log.d("Image","first load succcess");
}
catch (FileNotFoundException e)
{
e.printStackTrace();
Log.d("Image","first load failed");
}
但当我尝试用新名称重新加载图像时,我得到一个文件未找到异常,这是代码:
try {
File f = new File(filePath, username+".png");
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
playerImage.setImageBitmap(b);
Log.d("Image","second load succcess"); }
catch (FileNotFoundException e)
{
e.printStackTrace();
Log.d("Image","second load failed"); }
这就是日志错误:
08-09 20:23:50.730 15052-15052/? W/System.err:java.io.FileNotFound异常:lol1.png: open失败: ENOENT(没有这样的文件或目录)08-09 20:23:50.743 15052-15052/?W/System.err:
在libcore.io.IoBridge.open(IoBridge.java:452)在java.io.FileInputStream.(16/>在android.app.ActivityT创建(我nstrumentation.java:1108)启动活动(ActivityThread. java: 2414)在android. app. ActivityThread. handleLaunchActive(ActivityThread. java: 2521)在android. app. ActivityThread. Access 900美元(ActivityThread. java: 150)在android. app. ActivityThread$H. handleMessage(ActivityThread. java: 1383)在android. os. Handler.调度消息(Handler. java: 102)在android. os. Looper. cle(Looper. java: 148)在java. lang. reect. ActivityThread. main(ActivityThread. java: 5517)。方法。调用(本机方法)在com. android. interal. os。ZygoteInit$法。java: 726)在com. android. interal. os。ZygoteInit. main(ZygoteInit. java: 616)由: android. system引起。错误异常:打开失败:在libcore. io. pos六. open(本机方法)在libcore. io. BlockGuardOS. open(BlockGuardOS. java: 186)在libcore. io. IoBridge. open(IoBridge. java: 438)...14更多08-09 20:23:50.744 15052-15052/? D/Image:第二次加载失败
正如我们在评论中所讨论的,我相信您的renameTo()无法工作,因为文件中存在某种类型的保留,但您没有发布完整的代码,因此我不能完全确定。
使用您提供的代码,我创建了一个MainActivity,它完成了对存储在内部存储器(即pippo.png)中的文件的重命名。运行“活动”时,调试日志会证明重命名成功。
注意:在我下面的解决方案中,我只是创建文件,并将它们放在你说的应该去的地方,以便为你提供在你的应用程序中应该/可以如何使用renameTo()的答案,我实际上并没有处理图像,因为你没有向我提供你用来访问图像的代码。我相信您已经意识到了这一点,但您需要确保用户正确选择了您正在使用的图像,并且在将示例插入实际应用程序时,路径是准确的。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String imageFilename = "pippo.png";
//example username, I am not sure how you get this info
String exampleUsername = "user1";
try {
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
//check that we are good here...
if(directory.exists())
Log.d("ImageTAG", "'imageDir' exists");
// create imageDir
File completeImagePath = new File(directory, imageFilename);
//write file
FileOutputStream out = new FileOutputStream(completeImagePath);
out.flush();
out.close();
//check to ensure complete image path exists... it should
if(completeImagePath.exists())
Log.d("ImageTAG", "'completeImagePath' exists");
//show full path on device
Log.d("ImageTAG", "Image saved success, complete Image Path: " +
completeImagePath.getAbsolutePath());
//redeclaration of file here is not needed, but added for clarity
File from = new File(completeImagePath.getAbsolutePath());
//what you are renaming the file to
File to = new File(directory, exampleUsername + ".png");
//now rename
Boolean success = from.renameTo(to);
Log.d("ImageTAG", "Successful Rename: "+success.toString()+"| File is now named: "+to.getPath());
} catch (Exception e) {
e.printStackTrace();
Log.d("ImageTAG","saved failed");
}
}
}
问题内容: 我正在从Internet下载文件,并将流数据保存到getFilesDir()给定的应用程序内部存储中的临时文件中。 下载完成后,我需要将临时文件移动到外部存储器(通常是SD卡)上的下载目录中。但是由于某种原因,File.renameTo()对此不起作用。我猜是有问题的,因为它是两个单独的文件系统,但是我仍然可以直接下载到SD卡,并且文件URI是正确的。 是否有另一种简单快捷的方法将该文
问题内容: 如何复制到外部存储保持,以便以后可以共享首选项。 试图读取并另存为一个文件,创建了类型,但我需要一个。想过遍历应用程序的内部存储和复制文件,然后将其放入外部存储,但这可能太复杂了。 真的很想知道是否存在一种简单而明智的方式来传递`sharedpreferences。 问题答案: 使用此代码, 并取回它, 注意 使用此代码只能处理字符串类型首选项,
我正在完成Android的任务。 我从URL下载文件并保存在android手机的内部存储/目录中?我的代码写在下面,但这是外部存储代码,我想要内部存储代码。 这是外部存储代码,但我想保存在Android手机的内部存储中。
我正在实施一个在Amazon S3中提供文件存储的应用程序,而用户使用普通文件进行操作 我有什么方法可以重命名/移动整个文件夹(从而递归地修改它的内容)? 或者我必须为每个资源手动实现递归解析和调用copy-delete吗? 谢谢
我试图以编程方式(通过SPARQL查询或restendpoint)重命名ontotext graphdb存储库。 我可以使用这里记录的以下SPARQL删除旧存储库并插入新存储库,但是这会删除旧存储库中的所有数据 我可以手动将索引文件复制到这个新的存储库位置,但是是否有内置的gradb功能来完成此操作。
我目前正在将spark数据帧存储为。Azure上blob存储中的csv文件。我正在使用以下代码。 这是可行的,但它会创建一个SmtRef。csv文件夹中的实际。csv文件存储为part-00000-tid。csv。如何指定实际的名称。csv文件? 提前感谢