`
jythoner
  • 浏览: 602028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于用Java I/O 复制文件的问题

    博客分类:
  • Java
阅读更多
今天遇到了一个极其郁闷的问题,想写一段代码,可以给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) {
		}
	}
}


分享到:
评论
5 楼 jythoner 2009-02-09  
lyazure 写道

拷贝后还要写注册表,我们手动拷贝到font文件夹的时候会触发windows注册并拷贝这个字体。表面上看似乎我们做的是单纯的拷贝操作,其实并不是,同样我们把字体剪切过去时源目录的字体文件并不会消失,同样是触发windows注册和拷贝这个字体,效果都和双击这个字体文件一样。&nbsp;&nbsp; 如果只是要在java程序里使用特定字体用java.awt.Font类就可以了,可以看看Font.creatFont()方法。注册到windows反而失去了跨平台的特性了。


非常感谢,受教了,我把问题想简单了,呵呵
4 楼 lyazure 2009-02-06  
拷贝后还要写注册表,我们手动拷贝到font文件夹的时候会触发windows注册并拷贝这个字体。表面上看似乎我们做的是单纯的拷贝操作,其实并不是,同样我们把字体剪切过去时源目录的字体文件并不会消失,同样是触发windows注册和拷贝这个字体,效果都和双击这个字体文件一样。
   如果只是要在java程序里使用特定字体用java.awt.Font类就可以了,可以看看Font.creatFont()方法。注册到windows反而失去了跨平台的特性了。
3 楼 onelee 2009-02-06  
没错啊~~
试了下,可以用了额
2 楼 jythoner 2009-02-05  
引用
试试看java复制过去的文件能用Windows默认的查字器打开么?

能打开,但是里面不显示字体
可是文件大小和用工具比较都说是相同的
1 楼 njuptsoz 2009-02-05  
试试看java复制过去的文件能用Windows默认的查字器打开么?

相关推荐

    Java I/O文件读写/删除/复制等

    主要包含文件的读写,删除,拷贝,文件的权限设置,文件绝对路径等等

    Java中I/O流对文件进行复制粘贴及可能会出现的问题

    需求:将E:\电脑桌面壁纸\MisakaMikoto.jpg图片文件复制到D:\某科学的超电磁炮 目录下 public class Test { public static void main(String[] args) throws IOException { //创建字节输入流对象,关联数据源文件...

    I/O流复制文档或者歌曲等

    Java I/O字符流复制文档,字节流复制歌曲等 自己定义

    Java I/O技术之文件操作详解

    主要介绍了Java I/O技术之文件操作详解,需要的朋友可以参考下

    Java实现的小型文件管理系统

    文件批量处理用(Eclipse)Java实现,模块为了方便管理文件而设计,通过本模块可以快速地实现文件的批量复制、批量删除、批量重命名、文件分类等。内含设计文档,包括使用说明。还有打包好的可运行的jar文件。

    java命令行文件管理器

    没有界面的java命令行文件管理器,包括复制文件、复制文件夹、复制目录、删除文件、删除文件夹、删除目录等等功能

    I/O程序的设计 设计语言java

    1.显示一个“打开”文件对话框,并选择一个文件 2.从字节流、字符流、随机访问文件3种方式选择一种完成对该文件的复制 3.检查复制后的文件内容与原文件是否一致

    java-io-guide:Java中的Java IO(输入和输出流)指南

    File示例列表,显示了使用Java I / O创建,读取,写入,修改文件以及获取文件信息的方法。 使用BufferInputStream读取文件 使用DataInputStream读取文件 以字节为单位获取文件大小KB MB GB TB 文件序列化示例 如何...

    资源描述自己打的java简单记事本

    我使用了Java Swing库来创建用户界面,并使用Java I/O库来处理文件操作。我还使用了一些其他的Java类和方法,例如JFileChooser、JTextPane、JMenuBar等等。 我希望这个简单的记事本可以帮助其他学习Java编程的人,...

    北大青鸟第一学期JAVA课件第08章

    北大青鸟第一学期JAVA课件第08章

    JAVA 范例大全 光盘 资源

    第10章 I/O及文件操作 196 实例78 创建文件和目录 196 实例79 查找文件 199 实例80 删除文件夹和文件 201 实例81 文件复制与移动 204 实例82 多种方式读取文件内容 209 实例83 多种方式写文件 213 实例84 ...

    java 面试题 总结

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    Java常见面试问题整理.docx

    在JDK1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer 对象作为这块...

    java初学者必看

    第14章 Java I/O系统 14.1 I/O概述 14.2 文件操作 14.2.1 File类 14.2.2 File类应用 14.2.3 RandomAccessFile类 14.2.4 RandomAccessFile应用 14.3 字节流InputStream、OutputStream 14.3.1 字节输入、输出...

    Hangman:用Java编写的基于文本的准系统的Hangman游戏

    首先,我开始理解Java文件I / O的工作原理以及如何从文本文件读取内容。 也许我将来会重新审视并实施Hangman的更常见功能 未来的实施 计时器 给用户有限的猜测 玩GUI /视觉效果 显示已经猜到的字母列表

    office在线查看

    改工具既可以安装使用实现文件转换,也拷贝安装后Program Files下的Swftools文件夹放到工程中,以绿色软件方式来使用。转换命令将在FileConverterUtil.java中特别指明。 第四步:使用Flexpaper。Flexpaper就是一个...

    21天学通Java-由浅入深

    33分钟) 21 1.1 Java的平台简介 21 1.2 安装工具包 22 1.2.1 下载JDK 22 1.2.2 安装JDK 24 1.2.3 查看与设置环境变量 25 1.2.4 JDK常用命令 27 1.2.5 Java各个目录含义 28 1.2.6 要善于使用JDK的帮助文件 ...

    python学习笔记day02.txt

    主板,CPU, I/O设备,内存RAM 软件: 操作系统 Windows/Linux/Unix 应用软件 命令: mkdir rmdir ls rm pwd cd touch man tree --help day02笔记 sublime text 3 文本编辑器 启动命令: subl 或 ...

    Java MDI application framework-开源

    使用 Java/Swing 创建 MDI(多文档界面)应用程序的框架。 支持撤消/重做功能、国际化、剪贴板访问(剪切/复制/粘贴)、模块化文件 I/O(用于加载、保存、导出数据),...

    ORACLE9i_优化设计与系统调整

    §6.2.8 步骤8:优化I/O和物理结构 89 §6.2.9 步骤9:优化资源争用 89 §6.2.10 步骤10:优化所采用的平台 89 §6.3 应用优化方法 90 §6.3.1 设定明确的优化目标 90 §6.3.2 创建最少可重复测试 90 §6.3.3 测试...

Global site tag (gtag.js) - Google Analytics