ImageIO.write(); 会自动创建路径吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageIO.write(); 会自动创建路径吗相关的知识,希望对你有一定的参考价值。

1、通过Path类的Combine方法可以合并路径。
string activeDir = @"C:\myDir";
string newPath = System.IO.Path.Combine(activeDir, "mySubDirOne");

2、目录的创建。
创建目录时如果目录已存在,则不会重新创建目录,且不会报错。创建目录时会自动创建路径中各级不存在的目录。
(1)通过Directory类的CreateDirectory方法创建。
string activeDir = @"C:\myDir";
string newPath = System.IO.Path.Combine(activeDir, "mySubDirOne");
System.IO.Directory.CreateDirectory(newPath);

(1)通过DirectoryInfo的对象创建。
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\myDirTwo\mySubDirThree");
di.Create();

3、文件的创建。
通过Create方法创建文件,会覆盖同名的现有文件。创建文件时,该文件所在路径的目录必须存在,否则报错。
(1)通过File类的Create方法创建。

string activeDir = @"C:\myDir";
string newPath = System.IO.Path.Combine(activeDir, "mySubDirOne");
System.IO.Directory.CreateDirectory(newPath);

//创建一个空白文件
string fileNameOne = DateTime.Now.ToString("yyyyMMddHHmmssffff")
+ ".txt";
string filePathOne = System.IO.Path.Combine(newPath, fileNameOne);
System.IO.File.Create(filePathOne);

(2)通过FileInfo对象创建。

//通过Combine合并目录
//然后创建目录
string activeDir = @"C:\myDir";
string newPath = System.IO.Path.Combine(activeDir, "mySubDirOne");
System.IO.Directory.CreateDirectory(newPath);

//创建一个空白文件
string fileNameOne = DateTime.Now.ToString("yyyyMMddHHmmssffff")
+ ".txt";
string filePathOne = System.IO.Path.Combine(newPath, fileNameOne);
System.IO.FileInfo fi = new System.IO.FileInfo(filePathOne);
fi.Create();

复制目录文件

//复制单个文件到指定目录
string fileName = "test.txt";
string sourcePath = @"C:\testDir\subTestDir";
string targetPath = @"C:\testDir\subTestDirTwo";

string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);

if (!System.IO.Directory.Exists(targetPath))
System.IO.Directory.CreateDirectory(targetPath);

//如果已存在,参数为false时将报错,参数为true重写该文件
//当copy方法为两个参数时,默认重写为false。
System.IO.File.Copy(sourceFile, destFile, true);

//以下为复制一个目录下所有文件到指定目录
//如果复制有子目录的目录的所有文件,可以用递归或堆栈算法实现
if (System.IO.Directory.Exists(sourcePath))

string[] files = System.IO.Directory.GetFiles(sourcePath);

foreach (string s in files)

//仅返回路径字符串的文件名及后缀
fileName = System.IO.Path.GetFileName(s);
destFile = System.IO.Path.Combine(targetPath, fileName);
System.IO.File.Copy(s, destFile, true);





移动目录和文件

/*移动文件*/
string sourceFile = @"C:\testDir\subTestDir\test.txt";
string destFile = @"C:\testDir\subTestDirTwo\test.txt";
//当目标文件存在时,抛出异常
System.IO.File.Move(sourceFile, destFile);

/*移动目录*/
//移动目录将移动改目录的子目录和文件
System.IO.Directory.Move(@"C:\testDir\subTestDirTwo\", @"C:\testDir\subTestDir");

删除目录和文件
1、删除目录
删除目录,如果该目录不存在,会抛出异常。可以通过File类的Delete方法删除目录,也可以通过FileInfo对象方法删除目录。
(1)通过 File类的Delete方法删除目录

//删除可写空目录
//如果不为空抛出目录不为空异常
try

System.IO.Directory.Delete(@"C:\testDir\subTestDir");

catch (System.IO.IOException e)

Console.WriteLine(e.Message);


//第二参数为false时,只能删除空目录,否则抛出不为空异常
//第二参数为true时,删除目录,包括子目录和文件
try

System.IO.Directory.Delete(@"C:\testDir\subTestDir", true);

catch(System.IO.IOException e)

Console.WriteLine(e.Message);


(2)通过FileInfo对象方法删除目录

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\testDir\subTestDirTwo");
try

//无参数删除空目录
//当参数为false,可删除空目录;为true,删除目录,包括子目录和文件
di.Delete(true);

catch (System.IO.IOException e)

Console.WriteLine(e.Message);


2、删除文件
删除文件时如果指定文件的目录存在,而文件不存在,则不会抛出异常,如果指定文件的目录不存在,则会抛出异常。
(1)通过File类Delete方法删除文件

try

System.IO.File.Delete(@"C:\testDir\subTestDir\test.txt");

catch(System.IO.IOException e)

Console.WriteLine(e.Message);


(2)通过FileInfo对象Delete方法删除文件

System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\testDir\subTestDir\test1.txt");
try

fi.Delete();

catch(System.IO.IOException e)

Console.WriteLine(e.Message);
参考技术A 这个是位或,不是与。位或、位与是这样计算的。如:二进制的010|001结果是011,而010&001结果就是0了。O_WRONLY和O_CREAT的关系就相当于上面的010和001。他们位或的值不是0,位与的值就是0了。0表示什么都不做。用了位或后,就在一个整型的值上设置了不同的标志位,open函数会检测对应的标志位,如果该标志位设置为1了,就执行对应的操作。O_CREAT的意思就是创建的意思,在这里就是将创建文件的标志位设置为1,这样open函数无法写这个文件的时候就会创建他。

Java Gif 读写

【中文标题】Java Gif 读写【英文标题】:Java Gif read and write 【发布时间】:2021-10-04 12:12:50 【问题描述】:

我只想读取 gif 并将其写入文件(然后我会将其与其他图像一起添加到 BufferedImage 并创建一个普通图像)。但是现在不知道为什么我的gif在读写后会变成静态的。

BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));
ImageIO.write(bufferedImage, "gif", new File("1.gif"));

【问题讨论】:

BufferedImage 是单个静态图像。它不支持动画图像。 【参考方案1】:

我认为你不能仅仅使用 ImageIO.write 创建一个动画礼物,你需要创建一个正确格式的礼物文件来支持动画,看看: http://openimaj.org/apidocs/org/openimaj/demos/sandbox/image/gif/GifSequenceWriter.html

GifSequencerWriter 类构造函数按此顺序将所有图像粘贴在一起的文件(输出文件)的流、图像 RGB 的类型、大文件中每个单独图像的大小块以及布尔值,如果为真,则动画循环播放。 BufferedImage img 可以与您定义的相同。大文件将是所有单独的图像或相框,并在按顺序播放时进行动画效果。

一些示例代码:

System.out.println("Writing to file.");
ImageOutputStream stream = null;
BufferedImage img = BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));;
try 
      stream = new FileImageOutputStream(outFile);
      GifSequenceWriter writer = new GifSequenceWriter(stream, BufferedImage.TYPE_INT_RGB, BLOCK_SIZE, true);
      for (BufferedImage img: imgs) 
      
        writer.writeToSequence(img);
      
      writer.close();
     catch (IOException e) 
    e.printStackTrace();

【讨论】:

哦,还有一个问题,我如何从一个 gif 中制作一组图像?

以上是关于ImageIO.write(); 会自动创建路径吗的主要内容,如果未能解决你的问题,请参考以下文章

imageio.write的参数

java将base64转换成图片并保存在指定路径下ImageIO.write(bi1,"png",w2)提示image==null

Java ImageIO.write() 在保存期间更改质量

IOS设备上传图片,使用ImageIO.write 图片翻转纠正(JAVA)

ImageIO write 只加载一半图片(socket)

JSP使用ImageIO.write能不能在本页面输出图片?