作业1:将指定目录下的所有文件显示到列表框(JList)组件中。

代码如下:

import java.awt.;

import java.awt.event.
;

import javax.swing.;

import javax.swing.event.
;

import javax.swing.border.*;

import java.util.List;

import java.util.ArrayList;

import java.io.*;

public class wj extends JFrame

implements ChangeListener, ActionListener

{

private static final String VERSION = "Version 1.0";

private static final String WENJ_DIR = "文件";

  1. private JList fileList;
  2. private SoundEngine player;
  3. public static void main(String[] args)
  4. {
  5. wj gui = new wj();
  6. }
  7. public wj()
  8. {
  9. super("文件");
  10. player = new SoundEngine();
  11. String[] FileNames = findFiles(WENJ_DIR, null);
  12. makeFrame(FileNames);
  13. }
  14. private void quit()
  15. {
  16. System.exit(0);
  17. }
  18. private void showAbout()
  19. {
  20. JOptionPane.showMessageDialog(this,
  21. "文件\n" + VERSION,
  22. "About 文件",
  23. JOptionPane.INFORMATION_MESSAGE);
  24. }
  25. private String[] findFiles(String dirName, String suffix)
  26. {
  27. File dir = new File(dirName);
  28. if(dir.isDirectory()) {
  29. String[] allFiles = dir.list();
  30. if(suffix == null) {
  31. return allFiles;
  32. }
  33. else {
  34. List<String> selected = new ArrayList<String>();
  35. for(String filename : allFiles) {
  36. if(filename.endsWith(suffix)) {
  37. selected.add(filename);
  38. }
  39. }
  40. return selected.toArray(new String[selected.size()]);
  41. }
  42. }
  43. else {
  44. System.out.println("Error: " + dirName + " must be a directory");
  45. return null;
  46. }
  47. }
  48. public void stateChanged(ChangeEvent evt)
  49. {
  50. }
  51. //添加监听器
  52. public void actionPerformed(ActionEvent evt)
  53. {
  54. JComboBox cb = (JComboBox)evt.getSource();
  55. String format = (String)cb.getSelectedItem();
  56. if(format.equals("all")) {
  57. format = null;
  58. }
  59. fileList.setListData(findFiles(WENJ_DIR, format));
  60. }
  61. private void makeFrame(String[] Files)
  62. {
  63. setDefaultCloseOperation(EXIT_ON_CLOSE);
  64. JPanel contentPane = (JPanel)getContentPane();
  65. contentPane.setBorder(new EmptyBorder(6, 10, 10, 10));
  66. makeMenuBar();
  67. contentPane.setLayout(new BorderLayout(8, 8));
  68. JPanel leftPane = new JPanel();
  69. {
  70. leftPane.setLayout(new BorderLayout(8, 8));
  71. String[] formats = { "all", ".doc", ".png", ".mp3" };
  72. JComboBox formatList = new JComboBox(formats);
  73. formatList.addActionListener(this);
  74. leftPane.add(formatList, BorderLayout.NORTH);
  75. fileList = new JList(Files);
  76. fileList.setForeground(new Color(140,171,226));
  77. fileList.setBackground(new Color(0,0,0));
  78. fileList.setSelectionBackground(new Color(87,49,134));
  79. fileList.setSelectionForeground(new Color(140,171,226));
  80. JScrollPane scrollPane = new JScrollPane(fileList);
  81. scrollPane.setColumnHeaderView(new JLabel("wenj files"));
  82. leftPane.add(scrollPane, BorderLayout.CENTER);
  83. }
  84. contentPane.add(leftPane, BorderLayout.CENTER);
  85. pack();
  86. Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  87. setLocation(d.width/2 - getWidth()/2, d.height/2 - getHeight()/2);
  88. setVisible(true);
  89. }

//设置菜单项

private void makeMenuBar()

{

final int SHORTCUT_MASK =

Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

  1. JMenuBar menubar = new JMenuBar();
  2. setJMenuBar(menubar);
  3. JMenu menu;
  4. JMenuItem item;
  5. menu = new JMenu("File");
  6. menubar.add(menu);
  7. item = new JMenuItem("Quit");
  8. item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
  9. item.addActionListener(new ActionListener() {
  10. public void actionPerformed(ActionEvent e) { quit(); }
  11. });
  12. menu.add(item);
  13. menu = new JMenu("Help");
  14. menubar.add(menu);
  15. item = new JMenuItem("About ...");
  16. item.addActionListener(new ActionListener() {
  17. public void actionPerformed(ActionEvent e) { showAbout(); }
  18. });
  19. menu.add(item);
  20. }

}

界面图:

作业2:将游戏中最高纪录的玩家信息输出。

方法:这个可以利用seek()方法跳转指针和getFilePointer()方法来获取当前指针位置实现。

代码如下:

import java.io.File;

import java.io.IOException;

import java.io.RandomAccessFile;

public class TestRandomAccessFile{

private File file;

public static void main(String[] args){

TestRandomAccessFile traf = new TestRandomAccessFile();

traf.init();

traf.record("Adom",80);

traf.listAllRecords();

  1. }
  2. public void record(String record_breaker, int times){
  3. try{
  4. RandomAccessFile raf = new RandomAccessFile(file,"rw");
  5. boolean flag = false;
  6. while(raf.getFilePointer() < raf.length()){
  7. String name = raf.readUTF();
  8. long prior = raf.getFilePointer();
  9. if (record_breaker.equalsIgnoreCase(name)) {
  10. flag = true;
  11. //比较传递进来的数与之前数的大小
  12. if (raf.readInt() < times) {
  13. //利用seek()方法跳转到prior的位置
  14. raf.seek(prior);
  15. raf.writeInt(times);
  16. break;
  17. }
  18. } else {
  19. raf.skipBytes(4);
  20. }
  21. }
  22. if(!flag){
  23. raf.writeUTF(record_breaker);
  24. raf.writeInt(times);
  25. }
  26. raf.close();
  27. }catch(Exception e){
  28. e.printStackTrace();
  29. }
  30. }
  31. public void init(){
  32. if(file == null){
  33. file = new File("record.txt");
  34. try{
  35. file.createNewFile();
  36. }catch(IOException e){
  37. e.printStackTrace();
  38. }
  39. }
  40. }
  41. public void listAllRecords(){
  42. try{
  43. RandomAccessFile raf = new RandomAccessFile(file,"r");
  44. while(raf.getFilePointer() < raf.length()){
  45. String name = raf.readUTF();
  46. int times = raf.readInt();
  47. System.out.println("name:" + name + "\trecord:" + times);
  48. }
  49. raf.close();
  50. }catch(Exception e){
  51. e.printStackTrace();
  52. }
  53. }

}

界面图:

原来的程序效果图:

添加记录后的程序效果图:

Java学习笔记(五)的更多相关文章

  1. Java学习笔记五:Java中常用的运算符

    Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ...

  2. Java学习笔记五——流程控制

    分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > ...

  3. Java 学习笔记 (五) Java Compile\Build\Make的区别

    以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...

  4. Java学习笔记五(多线程)

    1.介绍 线程可以使程序具有两条和两条以上的可运行的路径.尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来仅仅须要 ...

  5. Java学习笔记五 常用API对象一

    常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...

  6. Java学习笔记五--String(二)String其他方法

    第一节课 // 清除单位字符串开始和结尾空白的副本 String.trim(); 字符串每次更改都会创建新的对象,而不会覆盖原来的字符串,每次拼接都会产生新的String对象,耗时耗内存. java. ...

  7. 20145330第五周《Java学习笔记》

    20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...

  8. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  9. Java IO学习笔记五:BIO到NIO

    作者:Grey 原文地址: Java IO学习笔记五:BIO到NIO 准备环境 准备一个CentOS7的Linux实例: 实例的IP: 192.168.205.138 我们这次实验的目的就是直观感受一 ...

  10. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

随机推荐

  1. form表单提交路径action="" 时的一种特殊情况

    一.说明: 当页面的form表达的action=""时,表示表单会提交到当前页面,但是如果当前页面的URL里已经带有一个参数了,每次提交表达时这个参数依然存在,不管form表单里有 ...

  2. ABAP 字符串操作

    1).SHIFT:截断字符串 SHIFT {c} [BY {n} PLACES] [{mode}].: 作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变 ...

  3. Keepalived 配置实例

    Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则 ...

  4. DAP in Coresight

    DAP简单来说分成 DP + AP , Debug Port + Access Port Debug Port--和JTAG的接口叫做Debug Port Access Port--和内部其他的接口叫 ...

  5. DEV设计之自动流水号,DEV专家解答,自己折腾了半天也没有搞定,怪英文不好

    () 老外专家给了回答,结果没有全到懂,又折腾了20分钟朋友提示才搞定 获取一个自动增加1的流水号值, 第一个参数是本事的数据库连接对象,第2个参数是也这个值为唯一标识返回来一个增量的值,第三个好像没 ...

  6. java面试中问题

    HashMap数据结构 http://blog.csdn.net/weiyouyin/article/details/5693496 HashMap冲突 http://www.blogjava.net ...

  7. 在windows 下安装启动redis

    在windows环境下安装 redis这个需要在github中下载开源代码,https://github.com/mythz/redis-windows 下载最近的zip包然后 解压到任意一个盘符中进 ...

  8. linux系统编程之I/O内核数据结构

    文件在内核中是用三种数据结构进行表示的 (1)文件描述符表:文件描述符表是一个结构体数组,数组的下标就是open函数返回的文件描述符. 文件描述符表的每一个记录有两个字段   *文件描述符标志 * 文 ...

  9. BulkyCopy .Net

    It has being ages to get back to cnblogs, Career path had been changed back to .Net development in 4 ...

  10. Linux下修改mysql密码

    # /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysq ...