Почему программа не может найти указанный системный файл и как его исправить?

113
16

Я хотел протестировать эту программу, но я не понимаю, почему она не работает. Он говорит, что не может найти file.txt, по какой-либо причине? Я просто хотел, чтобы файл.txt считывал команды протокола протокола журнала с клиента и сервера, добавлял их в новый файл с именем "file.txt". Он говорит, что не может найти указанный файл. Когда я создаю файл вручную по тому же пути, он работает, но кроме этого, он не будет. Я хочу, чтобы он автоматически создавал новый файл и добавлял сообщения журнала, все.

ОШИБКА:

Exception in thread "main" java.io.FileNotFoundException: C:\Users\Jaime\Desktop\file.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at java.io.FileReader.<init>(FileReader.java:58)
at SMTPDemo.main(SMTPDemo.java:28)

КОД:

/**
Source: http://www.java2s.com/Code/Java/Network-Protocol/SendingMailUsingSockets.htm
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SMTPDemo
{
public static void main(String args[]) throws IOException, UnknownHostException
{
String msgFile = "C:\\Users\\Jaime\\Desktop\\file.txt";
String from = "java2s@java2s.com";
String to = "yourEmail@yourServer.com";
String mailHost = "localhost"; //changed from yourHost to localhost
SMTP mail = new SMTP(mailHost);
if(mail != null)
{
if(mail.send(new FileReader(msgFile), from, to))
{
System.out.println("Mail sent.");
}
else
{
System.out.println("Connect to SMTP server failed!");
}
}
System.out.println("Done.");
}

static class SMTP
{
private final static int SMTP_PORT = 31000; //changed from 25 to 31000

InetAddress mailHost;

InetAddress localhost;

BufferedReader in;

PrintWriter out;

public SMTP(String host) throws UnknownHostException
{
mailHost = InetAddress.getByName(host);
localhost = InetAddress.getLocalHost();
System.out.println("mailhost = " + mailHost);
System.out.println("localhost= " + localhost);
System.out.println("SMTP constructor done\n");
}

public boolean send(FileReader msgFileReader, String from, String to) throws IOException
{
Socket smtpPipe;
InputStream inn;
OutputStream outt;
BufferedReader msg;
msg = new BufferedReader(msgFileReader);
smtpPipe = new Socket(mailHost, SMTP_PORT);
if(smtpPipe == null)
{
return false;
}
inn = smtpPipe.getInputStream();
outt = smtpPipe.getOutputStream();
in = new BufferedReader(new InputStreamReader(inn));
out = new PrintWriter(new OutputStreamWriter(outt), true);
if(inn == null || outt == null)
{
System.out.println("Failed to open streams to socket.");
return false;
}
String initialID = in.readLine();
System.out.println(initialID);
System.out.println("HELO " + localhost.getHostName());
out.println("HELO " + localhost.getHostName());
String welcome = in.readLine();
System.out.println(welcome);
System.out.println("MAIL From:<" + from + ">");
out.println("MAIL From:<" + from + ">");
String senderOK = in.readLine();
System.out.println(senderOK);
System.out.println("RCPT TO:<" + to + ">");
out.println("RCPT TO:<" + to + ">");
String recipientOK = in.readLine();
System.out.println(recipientOK);
System.out.println("DATA");
out.println("DATA");
String line;
while ((line = msg.readLine()) != null)
{
out.println(line);
}
System.out.println(".");
out.println(".");
String acceptedOK = in.readLine();
System.out.println(acceptedOK);
System.out.println("QUIT");
out.println("QUIT");
return true;
}
}
}

спросил(а) 2021-01-27T13:33:33+03:00 8 месяцев, 3 недели назад
1
Решение
80

Создание FileReader с файлом, который не существует, всегда будет генерировать FileNotFoundException. JVM обычно создает файл только для вас, если вы планируете писать его с помощью писателя.

Вышеприведенный код не имеет для меня большого смысла, но если вы хотите, чтобы он запускался независимо от файла, существующего при запуске этой программы в первый раз, см. File.createNewFile()

ответил(а) 2021-01-27T13:33:33+03:00 8 месяцев, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема