我试图在一个特定文件夹中保存多个图像第一个图像保存正确,但下一个图像只是替换第一个图像。如何保存多个图像?如何动态命名并使用相同的名称保存图像,但使用不同的扩展名,如image、image1、image2。。。下面是我的代码
public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener{
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
@SuppressWarnings("deprecation")
public void onCreate(Bundle icicle){
super.onCreate(icicle);
Log.e(TAG, "onCreate");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.cameraview);
ImageView img = (ImageView) findViewById(R.id.blankImage);
if(ImageViewActivity.isBlack)
img.setBackgroundResource(android.R.color.black);
else
img.setBackgroundResource(android.R.color.white);
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
}
private void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
private File getAlbumStorageDir(Context context, String albumName) {
// Get the directory for the app's private pictures directory.
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if(file.exists()){
return null;
}
if (!file.mkdirs()) {
Log.e("MainActivity.error", "Directory not created");
}
return file;
}
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
if (data != null){
//Intent mIntent = new Intent();
//mIntent.putExtra("image",imageData);
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
Bitmap resizedBitmap=null;
try{
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length,opts);
bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = 300;
int newHeight = 300;
// calculate the scale - in this case = 0.4f
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
matrix.postRotate(90);
resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
width, height, matrix, true);
ImageViewActivity.image.setImageBitmap(resizedBitmap);
}catch(Exception e){
e.printStackTrace();
}
//StoreByteImage(mContext, imageData, 50,"ImageName");
//setResult(FOTO_MODE, mIntent);
FileOutputStream out = null;
File picturesDir = getAlbumStorageDir(getBaseContext(), "myDirName");
File savedPic = new File(picturesDir.getAbsolutePath() + "/mynewpic.jpg");
try {
out = new FileOutputStream(savedPic);
resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
copy(picturesDir, savedPic);
} catch (IOException e) {
Log.e("MainActivity.err", "failed to copy");
}
setResult(585);
finish();
}
}
};
protected void onResume(){
Log.e(TAG, "onResume");
super.onResume();
}
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
}
protected void onStop(){
Log.e(TAG, "onStop");
super.onStop();
}
@TargetApi(9)
public void surfaceCreated(SurfaceHolder holder){
Log.e(TAG, "surfaceCreated");
mCamera = Camera.open(ImageViewActivity.cameraID);
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.e(TAG, "surfaceChanged");
// XXX stopPreview() will crash if preview is not running
if (mPreviewRunning){
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(300, 300);
if(ImageViewActivity.cameraID == 0){
String stringFlashMode = p.getFlashMode();
if (stringFlashMode.equals("torch"))
p.setFlashMode("on"); // Light is set off, flash is set to normal 'on' mode
else
p.setFlashMode("torch");
}
/*mCamera.setParameters(p);*/
try{
mCamera.setPreviewDisplay(holder);
}catch (Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG, "surfaceDestroyed");
//mCamera.stopPreview();
//mPreviewRunning = false;
//mCamera.release();
}
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
public void onClick(View v) {
// TODO Auto-generated method stub
mCamera.takePicture(null, mPictureCallback, mPictureCallback);
}
}
使用递归调用,它可以很容易地实现。下面是代码。
/**
* fileCount - to avoid overwrite and save file
* with order ie - test - (1).pdf, test - (2).pdf
*/
fun savePdf(directoryPath: String, fileName: String, fileCount: Int = 0) {
val newFileName = if (fileCount == 0) {
"$fileName.pdf"
} else {
"$fileName - ($fileCount).pdf"
}
val targetFilePath = File(directoryPath, newFileName)
if (targetFilePath.exists()) {
savePdf(directoryPath, fileName, fileCount + 1)
return
}
// add your logic to save file in targetFilePath
}
在你的代码中这样称呼它。
savePdf(directoryPath, fileName)
将时间戳设置为ImageName,以便每次使用不同的名称保存。。
有关添加时间戳的信息,请参阅:此处
您可以在活动中使用计数器变量:
int counter = 0;
将其追加到文件名中,并在成功保存后递增:
File savedPic = new File(picturesDir.getAbsolutePath() + "/mynewpic" + counter + ".jpg");
try {
out = new FileOutputStream(savedPic);
resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored
counter++; // no exception thrown, increment the counter
} catch (Exception e) {
e.printStackTrace();
}
您应该使用某种持久性存储来存储计数器的当前值,例如SharedReferences
。
或者,您可以使用某种唯一标识符,System来代替计数器。例如,currentTimeMillis
,因此您不必跟踪这些值。
我想在文本文件中用新的英文字符替换突厥语字符{code>{c',c',I',I',G',G',S',S}。 这是我的密码。我在控制台上只获得原始内容,没有任何更改,也不会创建新文件。 编辑: 这是适用于我的新代码。但是我想使用一个较短的代码来替换方法。
我有一个文件,其中包含以下格式的正则表达式和替换文字字符串列表: 我想替换所有匹配的字符串与在多个文件。 我相信这是一个常见的问题,以前应该有人做过类似的事情,但我就是找不到用bash编写的现有解决方案。 例如: 输入: 预期产出: 主要挑战是: 要替换的字符串由POSIX扩展正则表达式描述,而不是文字,任何不是POSIX ERE元字符的字符,包括经常被一些工具用作regexp分隔符的,都必须被视
然后将这个变量添加到arrayList,我在程序中调用WriteToFile()方法。 AddBookDialog类的代码 WriteFile类的代码 相反,当我尝试向该文件写入另一本书时,它反而覆盖了第一行 哈姆雷特:威廉莎士比亚:企鹅:FIC Shak:23 //《哈利·波特》的书中详细内容已被改写
问题是,当我启动服务时,因为它们都是application.properties在服务类路径中,所以它会用来自域的application.properties替换来自服务的application.properties。我想把它们合并,如果它们有相同的名字,就像这个案子一样。这里是spring日志(调试+信息) 我找了很多,但什么也找不到。你知道吗?提前感谢!
我目前正在尝试拆分一个PDF文件,然后将每个ne保存到一个新文件中。问题是我找不到任何方法将新的附加到现有的。这是我目前用来打开和拆分PDF文件的代码(只是一个模型代码示例): 这很有效,我有一组对象。现在我想把它们保存到新文件中。我在java中找到了一个解决方案,可以基于给定的和创建一个新的PdfWriter实例。net我没有找到与此等效的。谢谢你的帮助!
问题内容: 我正在尝试使用java.nio.file.Files复制文件,如下所示: 问题在于Eclipse表示“文件类型中的方法copy(Path,Path,CopyOption …)不适用于参数(File,String,StandardCopyOption)” 我在Win7 x64上使用Eclipse和Java 7。我的项目设置为使用Java 1.6兼容性。 有解决方案吗,还是我必须创建类似的