import java.io.*;
import java.io.RandomAccessFile;
import java.util.StringTokenizer;import javax.swing.JPanel;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.*;
public class Rank extends JDialog{
JPanel pRank=new JPanel(new GridLayout(11,3));

Rank(){

setTitle("英雄榜");
setSize(400, 400);
getContentPane().add(pRank);
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2,
               (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

set();
setVisible(true);
}

public void set(){
try
{
RandomAccessFile rankfile=new RandomAccessFile("Rank.txt","r");
byte[] b=new byte[1024];
int n=rankfile.read(b);
byte[] c = new byte[n];
for(int i=0;i<n;i++)
c[i]=b[i];
String rankstr=new String(c);

pRank.add(new JLabel("名次",JLabel.CENTER));
pRank.add(new JLabel("玩家签名",JLabel.CENTER));
pRank.add(new JLabel("得分数",JLabel.CENTER));
StringTokenizer st1=new StringTokenizer(rankstr,";");
int i=0;
while(st1.hasMoreTokens())
{
i++;
pRank.add(new JLabel(""+i,JLabel.CENTER));
StringTokenizer st2=new StringTokenizer(st1.nextToken(),":");
pRank.add(new JLabel(""+st2.nextToken() ,JLabel.CENTER));
pRank.add(new JLabel(""+st2.nextToken() ,JLabel.CENTER));
}
}catch(Exception e )
{ }  
}
public static void main(String[] args) {
new Rank();
}}文本——Rank.txt
无名1:10000;无名2:6000;无名3:5000;无名4:4000;无名5:3000;无名6:2000;无名7:1000;无名8:500;无名9:200;无名10:100;功能要求:
1、最好不使用RandomAccessFile方式
2、最好使用vetor存放
*3、当对"文本Rank.txt"文件末尾追加一条记录(例如:记录14:5500),当该条记录的分数大于前面的分数,则按分数从大到小排序记录,并将分数最小的删除,然后写入"文本Rank.txt"并保存
*4、将文本中存放的记录,按分数从大到小输出面板中(共10条,以符号";"最为记录的间隔,以符号":"作为记录的名字和分数的间隔)

解决方案 »

  1.   


    2、最好使用vetor存放 
    Vector废了
      

  2.   

    使用vetor存放 
    Vector废了
      

  3.   

    Vector废了??什么意思?是俄罗斯方块程序设计,我在练习做个俄罗斯方块游戏,基本都做好了,就剩下个“保存记录”和“配音”功能了,问题是我不会读入写入功能
    *3、当对"文本Rank.txt"文件末尾追加一条记录(例如:记录14:5500),当该条记录的分数大于前面的分数,则按分数从大到小排序记录,并将分数最小的删除,然后写入"文本Rank.txt"并保存 
    *4、将文本中存放的记录,按分数从大到小输出面板中(共10条,以符号";"最为记录的间隔,以符号":"作为记录的名字和分数的间隔) 排序,我把记录(字符串——姓名,整型——分数)分别存放在2个数组中,然后进行从大到小排序,现在是不知怎么把数组写入文件而且有":"、";"分隔符(例如: 无名4:5500;小王:5000;)修改后的代码import java.io.RandomAccessFile;
    import java.util.StringTokenizer;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.event.*;public class Rank extends JDialog{ Rank(){ setTitle("英雄榜");
    setSize(400, 400);
    getContentPane().setLayout(new GridLayout(11,3));
    add(new JLabel("名次",JLabel.CENTER));
    add(new JLabel("玩家签名",JLabel.CENTER));
    add(new JLabel("得分数",JLabel.CENTER));

    setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2,
                   (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);

    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });

    setRank();
    setVisible(true);
    }

    public void setRank(){
    try
    {
    RandomAccessFile rankfile=new RandomAccessFile("Rank.txt","r");
    byte[] b=new byte[1024];
    int n=rankfile.read(b);
    byte[] c = new byte[n];
    for(int i=0;i<n;i++)
    c[i]=b[i];
    String rankstr=new String(c);

    String[] array1=new String[10];
    int[] array2=new int[10];
    String temp1;
    int temp2=0,m=0;

    StringTokenizer st1=new StringTokenizer(rankstr,";");
    //把记录均存放在对应的数组中
    while(st1.hasMoreTokens()){
    StringTokenizer st2=new StringTokenizer(st1.nextToken(),":");
    array1[m]=st2.nextToken();
    array2[m]=Integer.parseInt(st2.nextToken());
    m++;
    }
    //进行从大到小排序
    for(int j=0,num=0;j<10;j++){
    for(int i=j;i<10;i++)
    if(array2[num]<array2[i])
    num=i;
    if(num!=j){
    temp2=array2[num];
    array2[num]=array2[j];
    array2[j]=temp2;

    temp1=array1[num];
    array1[num]=array1[j];
    array1[j]=temp1;
    }
    num=j+1;
    }
    //重新写入到文件中
    //将记录输出到面板上
    n=0;
    while(n<10)
    {
    getContentPane().add(new JLabel(""+(n+1),JLabel.CENTER));
    getContentPane().add(new JLabel(""+array1[n],JLabel.CENTER));
    getContentPane().add(new JLabel(""+array2[n],JLabel.CENTER));
    n++;
    }

    }catch(Exception e )
    { }  
    }

    public static void main(String[] args) {
    new Rank();
    }}文本Rank.txt——无名2:6000;无名10:10;无名4:4000;无名5:3000;无名7:1000;无名9:200;无名3:5000;无名1:10000;无名8:50;无名6:2000;
      

  4.   

    Vector废了??什么意思?是俄罗斯方块程序设计,我在练习做个俄罗斯方块游戏,基本都做好了,就剩下个“保存记录”和“配音”功能了,问题是我不会读入写入功能
    *3、当对"文本Rank.txt"文件末尾追加一条记录(例如:记录14:5500),当该条记录的分数大于前面的分数,则按分数从大到小排序记录,并将分数最小的删除,然后写入"文本Rank.txt"并保存 
    *4、将文本中存放的记录,按分数从大到小输出面板中(共10条,以符号";"最为记录的间隔,以符号":"作为记录的名字和分数的间隔) 排序,我把记录(字符串——姓名,整型——分数)分别存放在2个数组中,然后进行从大到小排序,现在是不知怎么把数组写入文件而且有":"、";"分隔符(例如: 无名4:5500;小王:5000;)修改后的代码import java.io.RandomAccessFile;
    import java.util.StringTokenizer;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.event.*;public class Rank extends JDialog{ Rank(){ setTitle("英雄榜");
    setSize(400, 400);
    getContentPane().setLayout(new GridLayout(11,3));
    add(new JLabel("名次",JLabel.CENTER));
    add(new JLabel("玩家签名",JLabel.CENTER));
    add(new JLabel("得分数",JLabel.CENTER));

    setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2,
                   (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);

    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });

    setRank();
    setVisible(true);
    }

    public void setRank(){
    try
    {
    RandomAccessFile rankfile=new RandomAccessFile("Rank.txt","r");
    byte[] b=new byte[1024];
    int n=rankfile.read(b);
    byte[] c = new byte[n];
    for(int i=0;i<n;i++)
    c[i]=b[i];
    String rankstr=new String(c);

    String[] array1=new String[10];
    int[] array2=new int[10];
    String temp1;
    int temp2=0,m=0;

    StringTokenizer st1=new StringTokenizer(rankstr,";");
    //把记录均存放在对应的数组中
    while(st1.hasMoreTokens()){
    StringTokenizer st2=new StringTokenizer(st1.nextToken(),":");
    array1[m]=st2.nextToken();
    array2[m]=Integer.parseInt(st2.nextToken());
    m++;
    }
    //进行从大到小排序
    for(int j=0,num=0;j<10;j++){
    for(int i=j;i<10;i++)
    if(array2[num]<array2[i])
    num=i;
    if(num!=j){
    temp2=array2[num];
    array2[num]=array2[j];
    array2[j]=temp2;

    temp1=array1[num];
    array1[num]=array1[j];
    array1[j]=temp1;
    }
    num=j+1;
    }
    //重新写入到文件中
    //将记录输出到面板上
    n=0;
    while(n<10)
    {
    getContentPane().add(new JLabel(""+(n+1),JLabel.CENTER));
    getContentPane().add(new JLabel(""+array1[n],JLabel.CENTER));
    getContentPane().add(new JLabel(""+array2[n],JLabel.CENTER));
    n++;
    }

    }catch(Exception e )
    { }  
    }

    public static void main(String[] args) {
    new Rank();
    }}文本Rank.txt——无名2:6000;无名10:10;无名4:4000;无名5:3000;无名7:1000;无名9:200;无名3:5000;无名1:10000;无名8:50;无名6:2000;
      

  5.   

    还是自己搞定了,总算学会读入写出文件了,一起学习,共同进步
    import java.io.*;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import javax.swing.JFrame;public class Rank extends JDialog{ Rank(){
    setTitle("英雄榜");
    setResizable(false);
    setSize(400, 400);
    getContentPane().setLayout(new GridLayout(11,3));
    add(new JLabel("名次",JLabel.CENTER));
    add(new JLabel("玩家签名",JLabel.CENTER));
    add(new JLabel("得分数",JLabel.CENTER));

    setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2,
                   (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);


    setRank();
    setVisible(true);
    }

    public void setRank(){
    String str1,str2[],str3[];
    StringBuffer str=new StringBuffer();
    String[] array1=new String[10];
    int[] array2=new int[10];
    String temp1;
    int temp2=0;

    try { 
    BufferedReader in=new BufferedReader(new FileReader("Rank.txt"));
    str1=in.readLine();

    str2=str1.split(";");
    for(int i=0;i<str2.length;i++){
    str3=str2[i].split(":");
    array1[i]=str3[0];
    array2[i]=Integer.parseInt(str3[1]);
    } //进行从大到小排序
    for(int j=0,num=0;j<10;j++){
    for(int i=j;i<10;i++)
    if(array2[num]<array2[i])
    num=i;
    if(num!=j){
    temp2=array2[num];
    array2[num]=array2[j];
    array2[j]=temp2;

    temp1=array1[num];
    array1[num]=array1[j];
    array1[j]=temp1;
    }
    num=j+1;
    }
    //对记录进行重组
    for(int i=0;i<10;i++){
    str.append(array1[i]);
    str.append(':');
    str.append(array2[i]);
    str.append(';');
    }

    in.close();
    File file=new File("Rank.txt");
    file.delete();
    BufferedWriter out=new BufferedWriter(new FileWriter("Rank.txt"));
    out.write(str.toString());
    out.close();
    //将记录输出到面板上
    temp2=0;
    while(temp2<10)
    {
    getContentPane().add(new JLabel(""+(temp2+1),JLabel.CENTER));
    getContentPane().add(new JLabel(""+array1[temp2],JLabel.CENTER));
    getContentPane().add(new JLabel(""+array2[temp2],JLabel.CENTER));
    temp2++;
    }

    }catch(Exception e )
    { }  
    }
      public static void main(String[] args) {
    new Rank();
    }
    }文本Rank.txt—— 无名2:6000;无名10:10;无名4:4000;无名5:3000;无名7:1000;无名9:200;无名3:5000;无名1:10000;无名8:50;无名6:2000;
      

  6.   


    哪位朋友知道如何读取.jar中的文本文件,我程序编好了,导出了.jar运行程序,里面也包含了文本文件,可为什么程序不能读取?在编译器里测试一切正常。
    ??????????????????????????