To determine the closest point, you only need to get the X and Y differences, then square each of them and add them together. The smallest value that results will be from the closest point. There is no need to calculate the actual distance by including the square root step.
Assuming points has the test points, and you've set up variables to hold the minimum distance and the closest known point, something along these lines should suffice (not tested yet):
for (Point p : points)
int x = currentX - p.getX();
int y = currentY - p.getY();
if (minimumD > (x * x) + ( y * y))
minimumDistance = (x * x) + ( y * y);
closestPoint = p;
I'd set the above up as a function to return the closest point with parameters being an array of target points and a given X and Y. That would make it easy to test and verify.
I'll let someone else fill in the trig for the movement calculation. I think it would be pretty straightforward once you have the target and can use it to determine the slope of the desired movement.