浏览 3412 次
锁定老帖子 主题:关于用Java I/O 复制文件的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-05
原理就是将4个ttf字体文件复制到C:\\WINDOWS\\Fonts\\目录下。本来以为很简单,但用java I/O复制过去的字体不能使用(将记事本的字体改成DejaVuSansMono,如果有效果变化,就是正常的),直接手动复制同样的文件过去,就可以使用。不知道问题出在哪里? 哪位朋友帮忙看看,万分感谢,字体文件在附件中,代码如下: package com.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class FontInstall { public static void main(String[] args) { try { String[] fonts = { "DejaVuSansMono-Oblique.ttf", "DejaVuSansMono-BoldOblique.ttf", "DejaVuSansMono.ttf", "DejaVuSansMono-Bold.ttf" }; System.out.println(); for (int i = 0; i < fonts.length; i++) { // Create channel on the source FileChannel srcChannel = new FileInputStream(System .getProperty("user.dir") + "\\" + fonts[i]).getChannel(); // Create channel on the destination FileChannel dstChannel = new FileOutputStream( "C:\\WINDOWS\\Fonts\\" + fonts[i]).getChannel(); // Copy file contents from source to destination dstChannel.transferFrom(srcChannel, 0, srcChannel.size()); // Close the channels srcChannel.close(); dstChannel.close(); } } catch (IOException e) { } } } 用另一种写法试了下,也是不行,复制过去的文件大小是相同的,用比较工具比较也没问题。 package com.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class FontInstall2 { public static void main(String[] args) { try { String[] fonts = { "DejaVuSansMono-Oblique.ttf", "DejaVuSansMono-BoldOblique.ttf", "DejaVuSansMono.ttf", "DejaVuSansMono-Bold.ttf" }; System.out.println(); for (int i = 0; i < fonts.length; i++) { InputStream in = new FileInputStream(System .getProperty("user.dir") + "\\" + fonts[i]); OutputStream out = new FileOutputStream("C:\\WINDOWS\\Fonts\\" + fonts[i]); // 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(); } } catch (IOException e) { } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-05
试试看java复制过去的文件能用Windows默认的查字器打开么?
|
|
返回顶楼 | |
发表时间:2009-02-05
引用 试试看java复制过去的文件能用Windows默认的查字器打开么?
能打开,但是里面不显示字体 可是文件大小和用工具比较都说是相同的 |
|
返回顶楼 | |
发表时间:2009-02-06
没错啊~~
试了下,可以用了额 |
|
返回顶楼 | |
发表时间:2009-02-06
拷贝后还要写注册表,我们手动拷贝到font文件夹的时候会触发windows注册并拷贝这个字体。表面上看似乎我们做的是单纯的拷贝操作,其实并不是,同样我们把字体剪切过去时源目录的字体文件并不会消失,同样是触发windows注册和拷贝这个字体,效果都和双击这个字体文件一样。
如果只是要在java程序里使用特定字体用java.awt.Font类就可以了,可以看看Font.creatFont()方法。注册到windows反而失去了跨平台的特性了。 |
|
返回顶楼 | |
发表时间:2009-02-09
lyazure 写道 拷贝后还要写注册表,我们手动拷贝到font文件夹的时候会触发windows注册并拷贝这个字体。表面上看似乎我们做的是单纯的拷贝操作,其实并不是,同样我们把字体剪切过去时源目录的字体文件并不会消失,同样是触发windows注册和拷贝这个字体,效果都和双击这个字体文件一样。 如果只是要在java程序里使用特定字体用java.awt.Font类就可以了,可以看看Font.creatFont()方法。注册到windows反而失去了跨平台的特性了。 非常感谢,受教了,我把问题想简单了,呵呵 |
|
返回顶楼 | |