学习笔记图片从本地复制到csdn博客出现:外链图片转存失败:解决方法

博主常将学习笔记记录在Typora,再统一发布到CSDN博客。本文介绍用Java实现笔记转存的方法,主要使用Robot类模拟人的操作。给出三个类的源码,说明了操作步骤,该程序为半自动,需手动放光标,希望实现光标自动识别指定字符,还可提供jar包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先呢! 我是经常将学习笔记记录在Typora中,然后呢,找个时间将笔记统一发布到csdn博客中,一是为了养成一种写笔记的习惯,二是为了保存自己的笔记,防止放在本地电脑,出现什么意外,然后笔记就不见了(好吧,我承认我遇到过这样的事情,所以才下定决心做这个事情)


说完了这一大堆具体讲讲怎么做
因为我是主学java的就像这怎么用Java来做这件事情.
首先附上源码
autoUp.java

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class autoUp {

    public static void main(String[] args) {
 JFrame j = new JFrame("csdn半自动图片上传工具");
        j.setLayout(new FlowLayout());
        //1、事件源jb按钮就是事件源,因为要点击它
        JButton jb = new JButton("1开始)]");
        JButton ja = new JButton("2开始)");
        //2、事件处理程序ClickAction表示事件处理程序
        ClickActionB b = new ClickActionB();
        ClickActionA a = new ClickActionA();

        //3、关联,将事件源和事件处理程序a关联起来,意思是发生点击执行a
        jb.addActionListener(b);
        ja.addActionListener(a);
        //将jb源事件添加到窗口中。

        j.add(jb,BorderLayout.WEST);
        j.add(ja,BorderLayout.EAST);

        j.getContentPane().add(jb);
        j.getContentPane().add(ja);
        j.pack();
        j.setVisible(true);
    }
}

//事件处理程序,点击就是一个Action事件
class ClickActionB implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        select select = new select();
        try {
            select.toSelectB();
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
    }
}

class ClickActionA implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        select select = new select();
        try {
            select.toSelectA();
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
    }
}

select.java

import java.awt.*;
import java.awt.event.KeyEvent;

public class select {
      public void toSelectB() throws AWTException {
        Robot robot = new Robot();
        robot.delay(1000);
        //1.按下LEFT 光标向左移动两格
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        //2.按住 SHIFT+Ctrl 再加上 三次LEFT ---选中图片
        robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_CONTROL);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        //3.ctrl+C 复制图片
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_C);
        robot.delay(100);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_C);
        //4.按住CTRL+四次RIGHT 跳转到行尾
        robot.keyPress(KeyEvent.VK_CONTROL);
        for (int i = 0; i < 4; i++) {
            robot.keyPress(KeyEvent.VK_RIGHT);
            robot.keyRelease(KeyEvent.VK_RIGHT);
        }
        robot.keyRelease(KeyEvent.VK_CONTROL);
        //5.按住SHIFT+CTRL 加上12次LEFT
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_SHIFT);
        for (int i = 0; i < 12; i++) {
            downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        }
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        robot.delay(100);
        //------------------------我是一条分割线-----------------------------
        //6.移动到图片上传并且点击
        downUpUtil.toMoveMouse();
        //7.将图片名粘贴 ctrl+v
        robot.delay(1000);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.delay(10);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_V);
        //8.按下 ALT+O 打开图片--结束
        robot.delay(200);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_O);
        robot.delay(100);
        robot.keyRelease(KeyEvent.VK_ALT);
        robot.keyRelease(KeyEvent.VK_O);
    }

    public void toSelectA() throws AWTException {
        Robot robot = new Robot();
        robot.delay(1000);
        //1.按下LEFT 光标向左移动一格
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        //2.按住 SHIFT+Ctrl 再加上 三次LEFT ---选中图片
        robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_CONTROL);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        //3.ctrl+C 复制图片
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_C);
        robot.delay(100);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_C);
        //4.按住CTRL+四次RIGHT 跳转到行尾
        robot.keyPress(KeyEvent.VK_CONTROL);
        for (int i = 0; i < 4; i++) {
            robot.keyPress(KeyEvent.VK_RIGHT);
            robot.keyRelease(KeyEvent.VK_RIGHT);
        }
        robot.keyRelease(KeyEvent.VK_CONTROL);
        //5.按住SHIFT+CTRL 加上12次LEFT
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_SHIFT);
        for (int i = 0; i < 13; i++) {
            downUpUtil.toUseKey(KeyEvent.VK_LEFT);
        }
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_SHIFT);
        robot.delay(100);
        //------------------------我是一条分割线-----------------------------
        //6.移动到图片上传并且点击
        downUpUtil.toMoveMouse();
        //7.将图片名粘贴 ctrl+v
        robot.delay(1000);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.delay(10);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_V);
        //8.按下 ALT+O 打开图片--结束
        robot.delay(200);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_O);
        robot.delay(100);
        robot.keyRelease(KeyEvent.VK_ALT);
        robot.keyRelease(KeyEvent.VK_O);
    }
}

downUpUtil.java

import java.awt.*;
import java.awt.event.InputEvent;

public class downUpUtil {

    public static void toUseKey(int keycode) throws AWTException {

        Robot robot = new Robot();
        robot.keyPress(keycode);
        robot.delay(50);
        robot.keyRelease(keycode);
        robot.delay(50);
    }

    public static void toMoveMouse() throws AWTException {
        Robot robot = new Robot();
        robot.mouseMove(580,180);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        //8.移动鼠标到屏幕中央点击"上传图片"按钮
        robot.delay(100);
        robot.mouseMove(683,360);
        robot.delay(1000);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
    }
}

一共三个类,其实很简单主要是用了java 的一个类 Robot 机器人类,模拟真实的人的动作来操作.

在这里插入图片描述

操作方法:

  • 首先手动操作一遍(目的是让电脑记住图片存放的位置以便于之后的自动操作)

  • 将光标放在最后一行的末尾,

    • 第一种 )]
      在这里插入图片描述
  • 第二种 )
    在这里插入图片描述
    可以看到结尾有两种形式,第一种是之前Typora转存的形式
    第二种应该是更新之后的形式,两种不一样我已分别做了两个按钮根据情况不同选择对应的按钮

  • 然后切换到程序按钮界面,按下开始键,
    在这里插入图片描述

  • 迅速切换到博客界面(博客界面最大化)之后程序自动操作一次,
    -具体的过程是

  1. 程序自动复制图片名称

在这里插入图片描述
2. 然后选中所有文字
在这里插入图片描述
3. 鼠标自动定位到图片按钮
在这里插入图片描述
4. 点击之后自动点击"选择图片"
在这里插入图片描述
5. 自动将图片名称粘贴到文件名中,然后自动点击打开

在这里插入图片描述
6.图片就上传成功了

在这里插入图片描述

  1. 然后重复执行放光标,切换界面,按开始键,再切换界面.

最后,我这个是半自动的程序,必须手动将光标放在三行文字的最后一行的末尾,而且这个是我转存之后文字的数量是这样,如果和我的有区别还需要更改代码让光标移动的次数改变,我写的这个代码我的是好用了,具体到每个人可能有差别.这个就你们自己探索了或者评论找我.
有没有大佬知道如何让光标自动识别到指定的字符"]"之后然后停下来,如果这个能够做到,就真的是全自动的了.嘻嘻QAQ.
希望有大佬提提意见!!!

如果有需要这个程序的jar包的,评论联系我 ,发给你QAQ

看到最后的帮忙点个👍🙏 谢谢,这个对我真的很重要!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴走的山交

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值