【问题标题】:Open file from user input and then read the values stored on the file从用户输入打开文件,然后读取存储在文件中的值
【发布时间】:2015-04-13 21:45:15
【问题描述】:

嗨,我有一个客户和一个主机。我希望客户端打开一个文件,其文件名是从用户输入中获得的,然后读取存储在文件中的数字并将数字发送到主机。

Socket clntSock = new Socket("127.0.0.1", 6000);
Scanner in = new Scanner(System.in);
System.out.println("What is the filename?");
String input = in.nextLine();
File file = new File(input);
String msgToSend = input;
byte[] bytesToSend = msgToSend.getBytes();
OutputStream out = clntSock.getOutputStream();
out.write(bytesToSend);
out.close();
clntSock.close();

目前这就是我所拥有的。我被困在如何扫描文件上的数字上。显然它在我设置时将文件名发送到主机

String msgToSend = input; 

文件如下所示 (Anthony.txt)。

1    
2    
3    
4    
5

数字以这样的方式存储在文件中。关于如何实例化 Player 对象并从文件数据中设置播放器的名称和分数并将 Player 对象传输到服务器的任何想法?

我的主机代码:

 ServerSocket servSock = new ServerSocket(6000);
 PrintStream fileOut = new PrintStream("Datafromclient.txt");

 while (true)
 {
    Socket clntSock = servSock.accept();
    InputStream in = clntSock.getInputStream();
    byte[] receiveBuf = new byte[BUFSIZE];
    int recvMsgSize = in.read(receiveBuf);
    System.out.println("received data >> "+ new String(receiveBuf));
    fileOut.println(""+ new String(receiveBuf));
    in.close();
    clntSock.close();

首先我被要求制作一个游戏,它创建一个玩家并将分数存储到一个文件中。

播放器类:

//Class declaration of Player class
public class Player
{
/*--------------- Data Fields ---------------------------------------
Attributes of the class
*/
private String name;
private int playerId;
private int bestScore;
private static int numberOfPlayers = 0;
private ArrayList<Integer> scores = new ArrayList<Integer>();

/* -------------- CONSTRUCTOR --------------------------------------
*/
public Player(String name)
{
    this.name = name;
    numberOfPlayers++;
    playerId = numberOfPlayers;

}

//Create set method for setName
public void setName(String name)
{
    this.name = name;
}

//Create set method for setScores
public void setScore(int score)
{
    scores.add(score);
}

//Create get method for getPlayerId
public int getPlayerId()
{
    return this.playerId;
}

//Create get method for getName
public String getName()
{
    return this.name;
}

//Create get method for getScores
public ArrayList<Integer> getScores()
{
    return scores;
}

//Create get method for getBestScore
public int getBestScore()
{
    return bestScore;
}

//Method to expose the value of numberOfPlayers
public static int getNumberOfPlayers()
{
    return numberOfPlayers;
}

//Create get method for calcualteAverage
public double calculateAverage()
{
    Integer sum = 0;
    if(!scores.isEmpty())
    {
        for(Integer score : scores)
        {
            sum += score;
        }
        return sum.doubleValue() / scores.size();
    }
    return sum;

}

应用程序:

    String name;
    int scores;


    PrintStream fout = new PrintStream(new File("PlayerData2.txt"));
    //Create Scanner object
    Scanner input = new Scanner (System.in);
    while(true)
    {
    //Ask user for name
    System.out.printf("\n Enter Player Name:");
    name = input.nextLine();
    //Create a Player Object
    Player player1 = new Player(name);


    for (int i=0; i<5; i++)
        {
            //Ask user for number input
            System.out.println("Please pic a number between 1 - 20");
            player1.setScore(Integer.parseInt(input.nextLine()));

            Random rand = new Random();
            int answer = rand.nextInt(20) + 1;
            System.out.println(answer);
            System.out.println(""+player1.getScores());
            if ((answer >= player1.getScores().get(i)))
            {
                    System.out.println("Your guess is too low");
            }
            else if(answer <= player1.getScores().get(i))
            {
                    System.out.println("Your guess is too high");
            }


        }

    fout.println( "" + player1.getName() );
    fout.println( "" + player1.getScores().get(0) );
    fout.println( "" + player1.getScores().get(1) );
    fout.println( "" + player1.getScores().get(2) );
    fout.println( "" + player1.getScores().get(3) );
    fout.println( "" + player1.getScores().get(4) );

【问题讨论】:

  • 当您没有向我们提供任何有关播放器的信息时,我们怎么知道如何实例化播放器?
  • 不,完全不知道。什么是Player
  • 道歉。首先,我被要求创建一个游戏,要求玩家猜测 5 次并将这些值存储到文件中。我添加了上面的代码

标签: java file java.util.scanner fileinputstream fileoutputstream


【解决方案1】:

这是你可以做到的一种方式,

// Use a Scanner to read the File
Scanner readFile = new Scanner(file);

// Loop Through Each Line
while(readFile.hasNext()) {

    // Get Number as a Byte
    byte[] number = readFile.nextLine().getBytes();

    // Write number to OuputStream
    out.write(number);

    // Flush OuputStream, Never forget to Flush your OutputStreams
    out.flush();

}

如果您想一次性发送所有数字,您可以先将它们存储在 Array 或 StringBuilder 中,然后按照您的意愿使用它。


编辑

我看到你想发送 Player 对象,不知道怎么做,至少现在你可以看到如何读取文本文件了。

【讨论】:

  • 谢谢理查德。我会尝试这样做。我想现在我知道如何发送 Player 对象了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2017-08-02
  • 2016-02-12
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多