今天遇到了一个极其郁闷的问题,想写一段代码,可以给windows自动安装一种字体。
原理就是将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) {
}
}
}
分享到:
- 2009-02-05 17:12
- 浏览 3081
- 评论(5)
- 论坛回复 / 浏览 (5 / 3412)
- 查看更多
相关推荐
Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...
复制文件通常使用 `FileInputStream` 和 `FileOutputStream` 结合 `BufferedInputStream` 和 `BufferedOutputStream` 来实现。通过读取源文件的字节并写入目标文件,可以完成复制操作。 4. **文件的权限设置** ...
Java I/O(输入/输出)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件、网络连接、系统硬件等。在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题...
使用I/O流进行文件复制是常见的应用场景,可以通过创建输入流和输出流,然后逐字节地复制,或者使用NIO的Channels和Buffers进行高效复制。 10. 数据流(Data Stream): DataInputStream和DataOutputStream支持...
MaglevIO是一个专注于提供易用性和高性能的Java I/O库,其设计灵感来源于Java的非阻塞I/O(Non-blocking I/O,NIO)框架。NIO是Java平台中一个重要的部分,它允许程序在处理大量并发连接时显著提高效率,尤其是在...
需求:将E:\电脑桌面壁纸\MisakaMikoto.jpg图片文件复制到D:\某科学的超电磁炮 目录下 public class Test { public static void main(String[] args) throws IOException { //创建字节输入流对象,关联数据源文件...
Java I/O字符流复制文档,字节流复制歌曲等 自己定义
这个更新极大地提升了Java处理I/O操作的能力,特别是在文件系统交互和网络通信方面。NIO2.0主要增加了对异步I/O的支持,允许程序在执行I/O操作时不必等待操作完成,而是可以继续执行其他任务,从而提高了程序的并发...
Java I/O技术是Java编程中不可或缺的一部分,它用于处理输入和输出操作,特别是在与文件系统交互时。在Java中,I/O操作的核心是`java.io`包,它提供了丰富的类和接口来支持文件操作和其他形式的数据传输。本文将深入...
Java I/O 操作是Java应用程序与外部数据交互的基础,涵盖了从磁盘文件读写到网络数据传输的各种场景。本文将深入探讨Java I/O的操作及优化技术。 首先,理解I/O的基本概念至关重要。在Java中,I/O是Input/Output的...
在Java编程语言中,文件和文件夹的复制是一项常见的任务,尤其在系统迁移...以上就是关于Java中使用递归复制文件和文件夹的核心知识点。通过理解这些概念和实践,你将能够有效地在Java程序中处理文件和目录的复制任务。
在IT行业中,I/O(Input/Output)程序设计是至关重要的,特别是在Java编程语言中。本文将深入探讨如何设计一个I/O程序,特别是在Java中实现文件的复制功能。我们将遵循标题和描述中的要求,详细解释如何打开文件...
标题“NIO与I/O的区别”涉及到的是Java编程中关于输入/输出(I/O)模型与新I/O(New I/O,NIO)模型的对比。这两种模型在处理数据流时有不同的特性和适用场景,理解它们的区别对于优化Java程序的性能至关重要。 I/O...
在Java编程语言中,我们可以利用...在实际开发中,推荐使用Java的I/O API,因为它提供了更好的控制、性能和跨平台兼容性。不过,理解如何通过DOS命令与系统交互仍然是有价值的,特别是在处理特定场景或兼容旧代码时。
在Java编程语言中,文件复制是一项基础且重要的操作,它涉及到I/O流的使用和文件处理。本项目实现了文本文件的复制功能,并提供了一个图形化用户界面(GUI),使得用户可以更加直观和方便地进行文件复制操作。接下来...
本主题将深入探讨如何使用Java实现文件复制、File类的文件读取和写入,以及I/O流的读取与写入。下面将详细阐述这些知识点。 1. **Java文件复制** 文件复制通常涉及读取源文件内容并将其写入目标文件。在Java中,...
Java I/O(输入/输出)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,包括读取文件、网络通信、处理系统硬件等。这个“javaIO学习课件”提供了非常详尽的教程,旨在帮助初学者和有经验的...
3. 文本I/O与二进制I/O的区别:二进制I/O直接将文件中的字节复制到内存,不进行转换;而文本I/O涉及编码和解码过程。Java虚拟机(JVM)在写入字符时将Unicode转换为特定文件编码,在读取时反之。 4. 字符表示:内存...
3. **使用Java I/O流读取文件**: - Java提供了一系列的I/O流类来处理文件操作。例如,`java.io.FileInputStream`可以用来读取二进制文件,`java.io.FileReader`和`java.io.BufferedReader`可以用来读取文本文件。 ...